第一篇文章,所以请不要伤害我。我到处搜寻,但似乎找不到找到想要的方法。我已经制作了一个脚本,可以将我拥有的文件夹复制到\$ computer\c $的多台计算机上。在这些文件夹中是运行.exe的批处理文件。我想要做的是从我用来复制文件夹的同一computers.txt中提取Powershell,然后使用psexec运行批处理文件。我可以手动完成所有操作,但是编写脚本似乎是个问题,这是我认为可以的,但显然不行。
$computers = gc "C:\scripts\computers.txt"
foreach ($computer in $computers) {
if (test-Connection -Cn $computer -quiet) {
cd C:\pstools
psexec \\%computer cmd
C:\Folder\install.bat"
} else {
"$computer is not online"
}
}
最佳答案
好的,让我们从顶部开始。
$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子句,如果计算机未联机,则写字符串“$ computer is not online”,然后关闭Else子句和ForEach循环的花括号。
} 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"
}
}
关于batch-file - 使用Powershell运行Psexec命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23119506/