好吧,让我们从最高层开始。
$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,我得到很多问题在这... –