[英]Howto use psexec via powershell invoke-command on a remote computer? (invalid handle)
我编写了一个 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>"
您可以尝试替换您的 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"}
您遇到了第二跳问题: 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:-Authentication Credssp -Credential
对我有用的是: Start-Process -FilePath .\\PsExec.exe -ArgumentList "/acceptEula /s \\$Computer program.exe /arg"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.