Powershell Remoting: Como executar um comando em várias máquinas com parâmetros individuais?

2

Por exemplo:

Digamos que eu tenha 10 servidores (Servidor 1-Server10) e uma lista csv na qual eu tenha os nomes de servidor e um Nome de Pastas / Caminho individual para cada servidor.

Como eu criaria essas pastas em cada máquina?

a) Abra todas as 10 conexões e execute um comando baseado no csv?  b) percorrendo 1by1

Por favor, aponte-me para a maneira mais eficaz

    
por icnivad 25.03.2010 / 23:27

3 respostas

3

Isso é muito ingênuo, pois não há verificação de erros / etc., mas faz o que você quer. Estou assumindo aqui que você está usando o Powershell 2.0 com o WinRM.

Supondo que você tenha uma configuração de CSV como esta:

server,path
server1,c:\path1
server2,c:\path2
server3,c:\path3

A solução seria assim:

$csvdata = import-csv .\test.csv
foreach ($row in $csvdata) {
    invoke-command $row.server { param($path) mkdir $path } -argumentlist $row.path
}

A única parte realmente estranha aqui é como você obtém o caminho passado. Normalmente, o script em invoke-command não pode ler suas variáveis locais. Você configura um parâmetro para ele (chamado $path ) e depois coloca a variável local $row.path na lista de argumentos - isso permite que o comando mkdir nos servidores remotos use a variável $path e veja o que foi transmitido de o arquivo CSV.

    
por 26.03.2010 / 15:05
0

se você está fazendo algo que é baseado em wmi, então você pode utilizar chamadas assíncronas!

    
por 26.03.2010 / 00:30
0

minha resposta foi completamente fora da base, de qualquer forma, se você não tiver psv2 ou não implementar winrm.

$ csvdata = import-csv. \ test.csv

foreach ($ linha em $ csvdata) {

md  \$row.server\c$\$row.path 

}

Estou fazendo isso em cima da minha cabeça, então, por favor, teste isso primeiro!

    
por 26.03.2010 / 18:38