psexec在启动工作中运行时永远不会完成
-
01-10-2019 - |
题
我正在尝试在48台计算机列表上执行CMD文件。我不想执行并依次等待完成,因为每个CMD大约需要10分钟才能完成。 WinRM不是一个选择。 WMI也不是。 PSEXEC 是 一个选项....但是我似乎无法在开始工作中发挥作用。
我正在做类似的事情:
$sb = {
param
(
$computer = "serverw01",
$userid = "domain2\serviceid",
$password = 'servicepw',
$command = "cd /d d:\ && updateAll.cmd"
)
d:\eps\pstools\PsExec.exe -u $userid -p $password "\\$($computer)" cmd /c $command
}
foreach ($computer in Get-Content "D:\Data\serverlist.txt") {
Start-Job $sb -ArgumentList $computer
}
这创造了一堆工作。。。
PS> get-job | receive-job -Keep
+ CategoryInfo : NotSpecified: (:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
PsExec v1.98 - Execute processes remotely
Copyright (C) 2001-2010 Mark Russinovich
Sysinternals - www.sysinternals.com
如果我像以下方式运行该函数,则可以执行正常。
& $sb -computer "serverw01"
启动脚本是在Server 2008R2框上的PowerShell v2.0中运行的,我在使用域Admin UserID登录时在域中的一个框中尝试过它(相同的结果)。
解决方案
尝试使用PSEXEC命令,确保您包括“ -d”不要等待响应,并在PSEXEC之后立即放置计算机变量:
d:\eps\pstools\psexec "\\$($computer)" /accepteula -u $userid -p $password -d cmd /c $command
其他提示
这个悬挂问题发生在Win2003和Win2008服务器上。
大多数人通过回声和管道等解决方法解决这个问题,以便Powershell从Stdin获得一些意见。
但是Powershell中存在解决方案。只需使用选项-Inputformat启动PowerShell,没有一个喜欢:
powershell -inputformat none -command ...
$computerList = Get-Content "D:\Data\serverlist.txt"
$sb =
{
param($name)
}
$computer = $name
$userid = "domain2\serviceid"
$password = 'servicepw'
$command = "cd /d d:\ && updateAll.cmd"
d:\eps\pstools\PsExec.exe -u $userid -p $password \\$computer cmd /c $command
{
}
foreach ($computer in $computerLinst) {
Start-Job $sb -ArgumentList $computer
}
不隶属于 StackOverflow