在Windows PowerShell(admin)中:
连接远程Windows
第一个月
尝试远程执行
Invoke-Command -Session $session -ScriptBlock {
cd C:\Path
ls
Start-Process -FilePath "C:\Path\MyProgram.exe"
start-Process cmd
}
字符串
cd和ls命令按预期工作,但Start-Process cmd和MyProgram.exe不启动。没有窗口出现;它似乎被跳过。
我还尝试了另一种方法:
PS C:\Jenkins> Enter-PSSession -Session $session
[xx.xx.xx.xx]: PS C:\Users\Administrator\Documents> Start-Process cmd
[xx.xx.xx.xx]: PS C:\Users\Administrator\Documents> (nothing happens)
型
这两种方式都无法启动或执行新窗口或.exe文件。
我尝试远程执行命令,并期望启动新的窗口或应用程序,但这并没有发生。
1条答案
按热度按时间vaj7vani1#
Start-Process
来调用外部程序,特别是如果它们是控制台应用程序。要在同一个窗口中同步 * 调用后者 ,并将其标准流连接到PowerShell的流,* 直接调用它们 *(例如
& "C:\Path\MyProgram.exe"
)Start-Process
适用和不适用的指导,请参见GitHub docs issue #6239Start-Process
默认创建一个 * 新窗口 *,则该窗口在远程会话中不可见。-Wait
的调用 * 同步 *,但在远程处理中,试图让-NoNewWindow
也在同一个窗口 * 中运行 * 是行不通的:你不会看到任何输出(在本地调用中,你会看到输出,但你无法 * 捕获 * 它;这就是为什么 * 直接 * 调用更可取的原因)。"C:\Path\MyProgram.exe"
是一个控制台应用程序,在远程会话中使用直接调用(由于语法原因,需要调用操作符&
,因为您的可执行路径是 * 加引号的 *):字符串
/C
和特定命令 * 的情况下运行cmd
*,即尝试启动 * 交互式 * 会话无法工作(cmd.exe
进程启动并立即悄悄退出)。远程运行 * 交互式 * 控制台应用程序的选项:
winrs.exe
CLI使用Windows远程管理**,该CLI支持交互式控制台应用程序。Windows远程管理使用与PowerShell远程处理相同的基础结构(WSMan/WinRM),因此它可能适用于启用了PowerShell远程处理的目标计算机;有关设置信息,请参阅the docs。型
winrs -r:yourcomputer cmd
)winrs.exe
的任何可执行文件(如果需要,还可以加上参数)都通过(cmd /c
)隐式执行。或者您也可以下载使用*
psexec
**,它也支持交互式控制台应用程序,但使用不同的远程机制,具有许多高级功能。