noz*_*3r0 9 powershell batch-file psexec
第一篇文章所以请不要伤害我.我四处寻找,但似乎找不到办法做我想做的事.我制作了一个脚本,将我拥有的文件夹复制到\ $ 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"
}
Run Code Online (Sandbox Code Playgroud)
}
The*_*ian 12
好吧,让我们从顶部开始吧.
$computers = gc "C:\scripts\computers.txt"
Run Code Online (Sandbox Code Playgroud)
这会将"computers.txt"文件的内容加载到变量中$computers.很简单,那里没有问题.
接下来我们有一个ForEach循环.它会分割内容$computers并处理每一行(可能是计算机的名称),$computer而不是大括号内的所有代码.
foreach ($computer in $computers) {
Run Code Online (Sandbox Code Playgroud)
该循环以标准的If-Then语句启动.如果(condition)那么{do stuff}.在这种情况下,它正在测试是否$computer在网络上可用.如果是,则尝试在其上运行PSExec.如果它不在线它运行Else子句,我们将在一秒钟内完成.
if (test-Connection -Cn $computer -quiet) {
Run Code Online (Sandbox Code Playgroud)
然后它改变目录.有点无意义,但没关系,无论如何.您可以明确地调用它,例如C:\PSTools\PSExec.exe <arguments>并保存一行,但实际上没有任何损害.
cd C:\pstools
Run Code Online (Sandbox Code Playgroud)
然后你正在调用PSExec,虽然这里有一点语法错误.应该$computer而不是%computer.此外,它应该只有你想要执行cmd的命令,而不是第二行的命令.如果使用Call运算符(&)使powershell意识到它正在尝试执行某些操作而不是运行cmdlet或函数或者不运行cmdlet或函数,则可能会有更好的结果.
& psexec \\$computer C:\Folder\install.bat
Run Code Online (Sandbox Code Playgroud)
之后是Else子句,说明计算机是否在线写入字符串"$ computer is not online",然后关闭Else子句和ForEach循环的大括号.
} else {
"$computer is not online"
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:好的,你完成的脚本看起来应该是这样的(如果路径中有空格,则在引号中包含目标):
$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"
}
}
Run Code Online (Sandbox Code Playgroud)
我意识到这个问题来自2014年,这个答案将不会直接解决用户提出的问题。但是对于这些天来遇到这个问题的人,如果您使用PowerShell,那么我想抛弃那些不需要*来使用PSExec的人。由于您已经在PowerShell中,只需使用即可Invoke-Command。
语法将是
Invoke-Command -ComputerName $Computer -ScriptBlock { C:\Folder\install.bat }
Run Code Online (Sandbox Code Playgroud)
真的很容易。
*要求在目标服务器上启用PowerShell远程处理。
| 归档时间: |
|
| 查看次数: |
62021 次 |
| 最近记录: |