我已经编写了一个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...
以下是所做工作的简要概述:
1.部署主机上的Powershell脚本根据目标主机创建部署脚本(ps1或batch
- 部署主机上的Powershell脚本将启动目标主机上创建的卷展脚本
- Powershell将通过
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>
启动 - 在目标主机上创建的rollout脚本执行psexec命令以在第三台主机上启动服务(仅当rollout脚本为powershell时,此操作才会失败)
这是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>"
3条答案
按热度按时间crcmnpdw1#
你可以尝试替换你的psexec命令,并像这样使用cmd.exe吗?也可以在psexec中添加-s,这样它就可以作为系统用户运行了。
au9on6nz2#
您遇到了第二跳问题:http://blogs.technet.com/b/heyscriptingguy/archive/2012/11/14/enable-powershell-quot-second-hop-quot-functionality-with-credssp.aspx
答案是启用两台相关计算机之间的适当关系(请参阅前面的链接,或只需在谷歌上搜索“powershell”和“second hop”),并添加到Invoke-Command:- 身份验证凭据sp-凭据
wfsdck303#
对我有效的是:启动-进程-文件路径。\PsExec.exe-参数列表“/acceptEula /s $计算机程序. exe/arg”