无法从ForEach Loop调用PSExec在远程计算机上运行cmd文件

时间:2018-11-21 16:23:26

标签: powershell sccm

在尝试运行以下代码时,我遇到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的列表。这些都是非域加入的设备,因此很困难。

预先感谢

编辑:

然后我尝试了以下操作:

$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

这将返回:

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.

有人知道这是怎么回事吗?丢失。

谢谢

2 个答案:

答案 0 :(得分:2)

感谢罗伊斯顿,

我也有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}");

答案 1 :(得分:0)

通过使用“开始过程”并调用DOS来运行PSEXEC远程会话,然后再次调用它来运行bat文件,我能够克服上述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