OK, weźmy to od góry.
$computers = gc "C:\scripts\computers.txt"
To ładuje zawartość pliku "computers.txt" do zmiennej $computers
. Wystarczająco proste, bez problemów.
Następnie mamy pętlę ForEach. Dzieli zawartość $computers
i przetwarza każdą linię (prawdopodobnie nazwę komputera) pod kątem całego kodu w nawiasach klamrowych.
foreach ($computer in $computers) {
Pętla ta rozpoczyna się standardową instrukcją If-Then. Jeśli (condition)
to {do stuff}
. W takim przypadku sprawdza się, czy $computer
jest dostępny w sieci. Jeśli tak, to próbuje uruchomić na nim PSExec. Jeśli nie jest online, uruchamia klauzulę Else, do tego dojdziemy za chwilę.
if (test-Connection -Cn $computer -quiet) {
Następnie zmienia katalog. Coś bezcelowego, ale dobrze, cokolwiek. Mogłeś nazwać go jawnie, na przykład C:\PSTools\PSExec.exe <arguments>
i zapisać linię, ale naprawdę nie zaszkodzi.
cd C:\pstools
Następnie dzwonisz do PSExec, ale tutaj jest mały błąd składniowy. Powinien to być $computer
, a nie %computer
. Powinien też mieć polecenie, które chcesz wykonać, a nie cmd
i polecenie w drugim wierszu. Możesz mieć lepsze wyniki, jeśli użyjesz operatora połączenia (&
), aby powershell zdał sobie sprawę, że próbuje wykonać coś, a nie uruchamia cmdlet lub funkcję, a co nie.
& psexec \\$computer C:\Folder\install.bat
Po to jest klauzula Else, który mówi, jeśli komputer nie jest zalogowany, aby napisać ciąg „$ komputer nie jest on-line”, a następnie zamknięcie szelki dla klauzuli indziej i pętli foreach.
} else {
"$computer is not online"
}
}
Edit: Ok, twój gotowy skrypt powinien wyglądać mniej więcej tak (zamknięty docelowej w cudzysłowach w przypadku istnieją przestrzenie w ścieżce):
$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"
}
}
Czy to właściwy skrypt został skopiowany i wklejony? Lub po prostu ponownie napisany, być może z kilkoma literami? – TheMadTechnician
Kopiuję/wklejam. Jestem bardzo początkującym ze skryptów w Powershell, przepraszam, jeśli składnia jest nędzna. – noz3r0
staram się nie używać psexec z powershell, mam wiele problemów na ten temat ... –