好吧,讓我們從最高層開始。
$computers = gc "C:\scripts\computers.txt"
將「computers.txt」文件的內容加載到變量$computers
中。很簡單,沒有問題。
接下來我們有一個ForEach循環。它分割$computers
的內容,並將每行(可能是計算機的名稱)作爲$computer
針對花括號內的所有代碼進行處理。
foreach ($computer in $computers) {
該循環以標準的If-Then語句啓動。如果(condition)
那麼{do stuff}
。在這種情況下,它正在測試以確定網絡上是否有可用的$computer
。如果是,那麼它會嘗試在其上運行PSExec。如果它不在線,它會運行Else條款,我們將在一秒鐘內完成。
if (test-Connection -Cn $computer -quiet) {
然後它改變目錄。有點毫無意義,但好吧,無論如何。你可以明確地調用它,如C:\PSTools\PSExec.exe <arguments>
並保存了一行,但確實沒有造成任何傷害。
cd C:\pstools
然後你打電話給PSExec,雖然這裏有一點語法錯誤。它應該是$computer
而不是%computer
。此外,它應該只有你想要執行的命令,而不是第二行的命令cmd
。如果您使用Call運算符(&
)讓PowerShell意識到它正在嘗試執行某些操作並且不運行cmdlet或函數,或者沒有運行,您可能會得到更好的結果。
& psexec \\$computer C:\Folder\install.bat
經過是這樣說,如果電腦是不能上網寫字符串「$電腦不上網」後閉括號爲else子句和foreach循環else子句。
} else {
"$computer is not online"
}
}
編輯:好了,你完成的腳本應該是這個樣子(封閉的目標在引號的情況下有路徑中的空格):
$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"
}
}
這是實際的腳本複製和粘貼?或者只是重新鍵入,可能有一些錯別字? – TheMadTechnician
我複製/粘貼它。我在Powershell中使用腳本非常新手,如果語法太糟糕,我很抱歉。 – noz3r0
儘量不要使用PowerShell psexec,我得到很多問題在這... –