PowerShell远程执行虚拟机本地exe程序失败问题求助
远程调用虚拟机本地exe程序失效问题记录
我已检索并尝试了多种命令变体均未生效,也查阅了Stack Overflow上所有相关参考资料,逐一验证了微软技术社区文档中列出的所有PowerShell运行可执行文件的方法。
我的核心需求是运行存放于远程虚拟机上的exe程序:我用C#开发发布了一款控制台应用,在虚拟机本地直接双击exe就能正常运行、完成全部任务,但尝试了多种远程调用方式都无法实现预期效果。
已尝试的调用方法
Invoke-VMScriptWin32_Process.Create()Invoke-CommandStart-ProcesspsexecInvoke-WmiMethod[diagnostics.process]::start
部分测试命令示例
Invoke-VMScript -VM VMName -GuestUser $(User_ADMIN) -GuestPassword "$(ADMIN_PASSWORD)" -ScriptText { D:\Path\to\ConsoleAppName.exe } Invoke-VMScript -VM VMName -GuestUser $(User_ADMIN) -GuestPassword "$(ADMIN_PASSWORD)" -ScriptText { cmd /c D:\Path\to\ConsoleAppName.exe } # 该ps1文件内部包含运行exe的命令,同类写法也试过用bat文件实现 Invoke-VMScript -VM VMName -GuestUser $(User_ADMIN) -GuestPassword "$(ADMIN_PASSWORD)" -ScriptText { PowerShell -NoProfile -ExecutionPolicy Bypass -Command "D:\Path\to\ConsoleAppPS.ps1" } Invoke-Command -ComputerName VMName -ScriptBlock { & "D:\Path\to\ConsoleAppName.exe" } # 也试过先通过 $session = New-PSSession -computername VMNAME -credential $cred 创建会话再执行 # 其余多种变体写法均测试过,没有效果
我也尝试过先通过New-PSSession创建远程会话再执行命令等其他变体写法,均未成功,恳请大家提供可行方案或替代实现思路。
更新1:最新测试思路是将exe执行命令写入虚拟机本地的bat/ps1脚本文件,再通过
Invoke-VMScriptcmdlet调用对应脚本,共测试了三种场景:
场景1
创建包含如下内容的ps1脚本文件:
Set-Location "D:\folder\path\to\ConsoleAppName" $cmd = "cmd /c `"ConsoleAppName.exe"`" Write-Output "Script execution started" Invoke-Expression -Command $cmd >> TestOutput.txt Write-Output "Script executed"
之后调用如下cmdlet执行该脚本:
Invoke-VMScript -VM VMName -GuestUser $(User_ADMIN) -GuestPassword "$(ADMIN_PASSWORD)" -ScriptText { PowerShell -NoProfile -ExecutionPolicy Bypass -Command "D:\Path\to\ps1file.ps1" }
场景2
创建同上内容的ps1文件,同时编写bat文件,内容为:PowerShell -NoProfile -ExecutionPolicy Bypass -Command "D:\Path\to\ps1file.ps1",再通过如下Invoke-VMScript命令调用bat文件:
Invoke-VMScript -VM VMName -GuestUser $(User_ADMIN) -GuestPassword "$(ADMIN_PASSWORD)" -ScriptText { cmd /c D:\Path\to\bat\file.bat } # 也试过用Invoke-Item替代cmd /c,同样无效
场景3
psexec调用方式:
D:\NewFolder\PAExec\psexec.exe \\VMIP -u $(User_ADMIN) -p "$(ADMIN_PASSWORD)" -i -s cmd /c D:\folder\path\to\ConsoleAppName\ConsoleAppName.exe
psexec返回报错信息如下:
PsExec v2.34 - Execute processes remotely ... The handle is invalid. Connecting to xx.xxx.xx.xxx... Couldn't access xx.xxx.xx.xxx: Connecting to xx.xxx.xx.xxx... ##[error]Cmd.exe exited with code '6'.
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

