我编写了一个powershell脚本,根据远程主机应该远程启动这个脚本(通过powershell invoke-command或psexec)创建一个powershell脚本或批处理脚本。
该脚本创建PowerShell或批处理脚本,因为并非所有运行这些创建脚本的主机都支持WinRM(Windows远程管理)。
创建的脚本包括一些psexec行,这些行在另一个远程主机上执行命令。创建的批处理脚本按预期工作,但是从创建的powershell脚本中,我从psexec调用中得到以下错误。
NotSpecified: (:String) [], RemoteException
+ CategoryInfo : NotSpecified: (:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
+ PSComputerName : <HOSTNAME REPLACED>
PsExec v2.1 - Execute processes remotely
Copyright (C) 2001-2013 Mark Russinovich
Sysinternals - www.sysinternals.com
The handle is invalid.
Access is denied.
Connecting to 10.XXX.XXX.127...Couldn't access 10.XXX.XXX.127:
Starting PSEXESVC service on 10.XXX.XXX.127...Could not start PSEXESVC service on 10.XXX.XXX.127:
Connecting to 10.XXX.XXX.127...Starting PSEXESVC service on 10.XXX.XXX.127...
以下是对所做工作的一个小概述:
Invoke-Command -ComputerName <destination host> -FilePath <path to created script> -Authentication default
& psexec.exe \\<destination host> -n 60 -accepteula -c -f <path to created script>
这是psexec命令,如果通过远程启动的PowerShell脚本执行,则会失败。
& psexec.exe \\<destination host> -n 60 -accepteula -u <user> -p <password> net stop <servicename>
通过远程启动的批处理脚本执行的同一命令psexec.exe \\<destination host> -n 60 -accepteula -u <user> -p <password> net stop <servicename>
可以正常工作。
更新#1
此外,如果我使用rdp连接到目标主机并启动powershell shell并粘贴命令,它可以正常工作。只有在远程启动时才会出现此问题。
我已经尝试了以下启动psexec的变种,一切都没有运气!
& psexec.exe \\<destination host> -n 60 -accepteula -s -u <user> -p <password> net stop <servicename>
Start-Process cmd.exe -Credential "<domain>\<user>" -WorkingDirectory $env:systemdrive -ArgumentList "/C psexec.exe \\<destination host> -n 60 -accepteula -u <user> -p <password> net stop <servicename>"
Start-Process powershell.exe -WorkingDirectory $env:systemdrive -Verb Runas -ArgumentList "cmd.exe /C psexec.exe \\<destination host> -n 60 -accepteula -u <user> -p <password> net stop <servicename>"
答案 0 :(得分:0)
你可以尝试替换你的psexec命令,并像这样使用cmd.exe也将-s添加到psexec,以便它将作为系统用户运行。我的测试命令:
icm -cn computer1 -ScriptBlock{ cmd.exe "/c psexec -s -u <login> -p <password> /accepteula /n 10 \\computer2 net start audiosrv"}
答案 1 :(得分:0)
答案是在所涉及的两台计算机之间建立适当的关系(请参阅上一个链接或只搜索谷歌搜索&#39; powershell&#39;以及&#39;第二跳&#39;)并添加到Invoke-命令: -Authentication Credssp -Credential
答案 2 :(得分:0)
对我有用的是: Start-Process -FilePath。\ PsExec.exe -ArgumentList&#34; / acceptEula / s \ $ Computer program.exe / arg&#34;