无法从 ForEach 循环调用 PSExec 到远程机器上的 运行 cmd 文件
Trouble Invoking PSExec from ForEach Loop to run cmd file on remote machines
我在尝试 运行 以下内容时遇到 error 9009
和 error code 6
的问题。我可以在没有 ForEach 循环的情况下在一台机器上成功 运行 所以,我想知道这里的 PSExec 是怎么回事。
$Credential = Get-Credential
$Random = Get-Random -Maximum 3
ForEach ($device in $site) {
New-PSDrive -Name ($SiteCode + $Random) -PSProvider FileSystem -Root ('\' + $device + '\c$') -Description STE -Credential $Credential
Copy-Item C:\ClientInstall\ -Destination "$($SiteCode + $Random):" -Verbose -Recurse -Force
psexec \$device cmd.exe /c c:\ClientInstall\clientinstall.cmd
}
Remove-PSDrive -Name ($Sitecode + '*') -Force -PSProvider FileSystem
$device
变量只是客户端的一个 IP,它位于 $site 变量中,它是 IP 的列表。这些是非域加入设备,因此是 faff。
提前致谢
编辑:
然后我尝试了以下方法:
$Credential = get-credential
$Random = Get-Random -Maximum 3
ForEach ($device in $site) {
New-PSDrive -Name ($SiteCode + $Random) -PSProvider FileSystem -Root ('\' + $device + '\c$') -Description STE -Credential $Credential
Copy-Item C:\ClientInstall\ -Destination "$($SiteCode + $Random):" -Verbose -Recurse -Force
psexec ("\" + $device) cmd.exe /c c:\ClientInstall\clientinstall.cmd
}
Remove-PSDrive -Name ($Sitecode + '*') -Force -PSProvider FileSystem
主要变化是:
psexec ("\" + $device) cmd.exe /c c:\ClientInstall\clientinstall.cmd
这个returns:
psexec : Connecting to 10.00.00.101...
At line:1 char:1
+ psexec ("\" + $posdevice) cmd.exe /c c:\ClientInstall\sccmguidrepair ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (Connecting to 10.00.00.101...:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Starting PSEXESVC service on 10.00.00.100...Connecting with PsExec service on 10.00.00.101...Starting cmd.exe on 10.00.00.101...
cmd.exe exited on 10.00.00.101 with error code 6.
有人知道这里发生了什么吗?丢失。
谢谢
我能够通过使用 Start-Process 并将 DOS 调用到 运行 中的 PSEXEC 远程会话然后再次调用它到 运行 蝙蝠来克服上述 9009 和错误代码 6 错误文件:
$Random = Get-Random -Maximum 10
ForEach ($device in $site) {
New-PSDrive -Name ($SiteCode + $Random) -PSProvider FileSystem -Root ('\' + $device + '\c$') -Description STE -Credential $Credential
Copy-Item C:\ClientRevert\ -Destination "$($SiteCode + $Random):" -Verbose -Recurse -Force
Start-Process cmd "/c C:\psexec.exe -u admin -p P@ssword \$device\ cmd /c c:\ClientRevert\clientinstall.cmd"
}
Remove-PSDrive -Name ($Sitecode + '*') -Force -PSProvider FileSystem
谢谢罗伊斯顿,
我也遇到了 psexec 的退出代码 6 问题。
我在 c# 应用程序中使用它进行一些远程机器更新。
我有 ExecuteCommand 方法,它负责我本地机器上的 cmd.exe 进程。
问题是,我只能执行一次命令。
第一次执行后,psexec 进程停止,但 PSEXEC 服务仍处于“标记为删除”状态。 (这是错误代码 6 的原因)
唯一的解决方案(我知道)是重新启动服务器。
(服务停止不起作用,注册表也发生了变化,因为 marked_for_deletion 标志的删除没有反映出来)
这就是我调用 psexec 的方式,它给了我错误代码 6:
ExecuteCommand(@"psexec -accepteula \" + server.Name() + " {some_command}");
这是适合我的解决方案:
ExecuteCommand(@"psexec -accepteula \" + server.Name() + " cmd.exe /c {some_command}");
我在尝试 运行 以下内容时遇到 error 9009
和 error code 6
的问题。我可以在没有 ForEach 循环的情况下在一台机器上成功 运行 所以,我想知道这里的 PSExec 是怎么回事。
$Credential = Get-Credential
$Random = Get-Random -Maximum 3
ForEach ($device in $site) {
New-PSDrive -Name ($SiteCode + $Random) -PSProvider FileSystem -Root ('\' + $device + '\c$') -Description STE -Credential $Credential
Copy-Item C:\ClientInstall\ -Destination "$($SiteCode + $Random):" -Verbose -Recurse -Force
psexec \$device cmd.exe /c c:\ClientInstall\clientinstall.cmd
}
Remove-PSDrive -Name ($Sitecode + '*') -Force -PSProvider FileSystem
$device
变量只是客户端的一个 IP,它位于 $site 变量中,它是 IP 的列表。这些是非域加入设备,因此是 faff。
提前致谢
编辑:
然后我尝试了以下方法:
$Credential = get-credential
$Random = Get-Random -Maximum 3
ForEach ($device in $site) {
New-PSDrive -Name ($SiteCode + $Random) -PSProvider FileSystem -Root ('\' + $device + '\c$') -Description STE -Credential $Credential
Copy-Item C:\ClientInstall\ -Destination "$($SiteCode + $Random):" -Verbose -Recurse -Force
psexec ("\" + $device) cmd.exe /c c:\ClientInstall\clientinstall.cmd
}
Remove-PSDrive -Name ($Sitecode + '*') -Force -PSProvider FileSystem
主要变化是:
psexec ("\" + $device) cmd.exe /c c:\ClientInstall\clientinstall.cmd
这个returns:
psexec : Connecting to 10.00.00.101...
At line:1 char:1
+ psexec ("\" + $posdevice) cmd.exe /c c:\ClientInstall\sccmguidrepair ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (Connecting to 10.00.00.101...:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Starting PSEXESVC service on 10.00.00.100...Connecting with PsExec service on 10.00.00.101...Starting cmd.exe on 10.00.00.101...
cmd.exe exited on 10.00.00.101 with error code 6.
有人知道这里发生了什么吗?丢失。
谢谢
我能够通过使用 Start-Process 并将 DOS 调用到 运行 中的 PSEXEC 远程会话然后再次调用它到 运行 蝙蝠来克服上述 9009 和错误代码 6 错误文件:
$Random = Get-Random -Maximum 10
ForEach ($device in $site) {
New-PSDrive -Name ($SiteCode + $Random) -PSProvider FileSystem -Root ('\' + $device + '\c$') -Description STE -Credential $Credential
Copy-Item C:\ClientRevert\ -Destination "$($SiteCode + $Random):" -Verbose -Recurse -Force
Start-Process cmd "/c C:\psexec.exe -u admin -p P@ssword \$device\ cmd /c c:\ClientRevert\clientinstall.cmd"
}
Remove-PSDrive -Name ($Sitecode + '*') -Force -PSProvider FileSystem
谢谢罗伊斯顿,
我也遇到了 psexec 的退出代码 6 问题。
我在 c# 应用程序中使用它进行一些远程机器更新。
我有 ExecuteCommand 方法,它负责我本地机器上的 cmd.exe 进程。
问题是,我只能执行一次命令。 第一次执行后,psexec 进程停止,但 PSEXEC 服务仍处于“标记为删除”状态。 (这是错误代码 6 的原因) 唯一的解决方案(我知道)是重新启动服务器。 (服务停止不起作用,注册表也发生了变化,因为 marked_for_deletion 标志的删除没有反映出来)
这就是我调用 psexec 的方式,它给了我错误代码 6:
ExecuteCommand(@"psexec -accepteula \" + server.Name() + " {some_command}");
这是适合我的解决方案:
ExecuteCommand(@"psexec -accepteula \" + server.Name() + " cmd.exe /c {some_command}");