在尝试运行以下代码时,我遇到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的列表。这些都是非域加入的设备,因此很困难。
预先感谢
编辑:
然后我尝试了以下操作:
$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.
有人知道这是怎么回事吗?丢失。
谢谢
答案 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