Ok, prendiamolo dall'alto poi.
$computers = gc "C:\scripts\computers.txt"
che carica il contenuto del file "computers.txt" nella variabile $computers
. Abbastanza semplice, nessun problema lì.
Quindi abbiamo un ciclo ForEach. Divide il contenuto di $computers
ed elabora ogni riga (presumibilmente il nome di un computer) come $computer
rispetto a tutto il codice all'interno delle parentesi graffe.
foreach ($computer in $computers) {
Questo ciclo si avvia con un'istruzione If-Then standard. Se (condition)
quindi {do stuff}
. In questo caso sta verificando se lo $computer
è disponibile sulla rete. Se lo è, tenta di eseguire PSExec su di esso. Se non è online, esegue la clausola di Else, ci arriveremo in un secondo.
if (test-Connection -Cn $computer -quiet) {
Quindi cambia directory. Un po 'inutile, ma ok, qualunque cosa. Potresti averlo chiamato in modo esplicito, come C:\PSTools\PSExec.exe <arguments>
e salvato una riga, ma non c'è davvero nulla di male.
cd C:\pstools
Quindi si chiama PSExec, anche se qui c'è un piccolo errore di sintassi. Dovrebbe essere $computer
e non %computer
. Inoltre, dovrebbe avere solo il comando che si desidera eseguire, non cmd
e il comando su una seconda riga. Potresti avere risultati migliori se usi l'operatore Chiama (&
) per far sì che PowerShell realizzi che sta tentando di eseguire qualcosa e non esegue un cmdlet o una funzione o cosa no.
& psexec \\$computer C:\Folder\install.bat
Dopo di che è la clausola Else che dice che se il computer non è in linea di scrivere la stringa "$ computer non è in linea" seguita da chiusura parentesi graffe per la clausola Else e del ciclo foreach.
} else {
"$computer is not online"
}
}
Edit: Ok, lo script finito dovrebbe apparire qualcosa di simile (target racchiuso tra virgolette nel caso in cui non ci sono spazi nel percorso):
$computers = gc "C:\scripts\computers.txt"
foreach ($computer in $computers) {
if (test-Connection -Cn $computer -quiet) {
& C:\pstools\psexec.exe \\$computer "C:\folder\install.bat"
} else {
"$computer is not online"
}
}
È che lo script vero copiato e incollato? O semplicemente ri-digitato, forse con alcuni refusi? – TheMadTechnician
L'ho copiato/incollato. Sono molto novizio con lo scripting in Powershell, mi dispiace se la sintassi è misera. – noz3r0
prova a non usare psexec con powershell, ho molti problemi su questo ... –