使用VMware PowerCLI的Invoke-VMScript高权限执行命令遇错求解
问题描述
使用Invoke-VMScript cmdlet远程在虚拟机执行命令时,尝试通过Start-Process -Verb RunAs以虚拟机内高权限管理员身份运行脚本,触发如下错误:
执行命令
Invoke-VMScript -ScriptText ' Start-Process powershell -ArgumentList "-c", "whoami" -verb RunAs ' -VM 'TEST-VM4105' -GuestUser 'username' -GuestPassword 'password' -Verbose
错误信息
ScriptOutput
Start-Process : This command cannot be run due to the error: This operation requires an interactive window station. At line:1 char:5 + & { Start-Process powershell -ArgumentList "-c", "whoami" -verb RunAs ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Start-Process], InvalidOperationException + FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand |
解决方法
方法1:直接使用管理员账户执行Invoke-VMScript
如果指定的GuestUser本身就是虚拟机内的管理员账户,无需嵌套提权命令,直接执行目标脚本即可:
Invoke-VMScript -ScriptText 'whoami' -VM 'TEST-VM4105' -GuestUser 'admin-account' -GuestPassword 'admin-password' -Verbose
方法2:用runas命令替代Start-Process
若必须通过普通账户提权,使用runas命令并添加/noprofile参数避免交互窗口依赖:
Invoke-VMScript -ScriptText 'runas /user:vm-local-admin /noprofile "powershell -c whoami"' -VM 'TEST-VM4105' -GuestUser 'username' -GuestPassword 'password' -Verbose
如果需要免交互传递管理员密码(仅测试场景使用,不建议明文):
Invoke-VMScript -ScriptText 'echo "admin-pass" | runas /user:vm-local-admin /noprofile /savecred "powershell -c whoami"' -VM 'TEST-VM4105' -GuestUser 'username' -GuestPassword 'password' -Verbose
方法3:切换到WinRM远程执行
启用虚拟机的WinRM服务后,使用Invoke-Command可以更可靠地实现远程提权执行:
- 先通过
Invoke-VMScript启用WinRM:
Invoke-VMScript -ScriptText 'winrm quickconfig -quiet' -VM 'TEST-VM4105' -GuestUser 'username' -GuestPassword 'password'
- 使用
Invoke-Command指定管理员凭据执行:
$adminCred = Get-Credential -UserName "vm-local-admin" -Message "输入管理员密码" Invoke-Command -ComputerName "TEST-VM4105" -ScriptBlock {whoami} -Credential $adminCred
内容的提问来源于stack exchange,提问作者osim_ans
相关产品推荐
相关产品推荐

