无法从 ForEach 循环调用 PSExec 到远程机器上的 运行 cmd 文件

Trouble Invoking PSExec from ForEach Loop to run cmd file on remote machines

我在尝试 运行 以下内容时遇到 error 9009error 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}");