You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本中启动远程交互式Shell遇到的问题

问题解决:脚本中启动远程交互式PowerShell会话

问题原因

Enter-PSSession是专门为交互式PowerShell环境设计的命令,它会接管当前会话的输入输出流。当在脚本中执行时,脚本运行在非交互式上下文,没有用户交互的输入通道,导致会话卡住无响应。你之前尝试的Start-Process仅启动了本地PowerShell,没有将远程连接逻辑传递到新进程中,所以无法进入远程会话。

解决方案:启动新的交互式PowerShell进程执行远程连接

通过Start-Process启动一个全新的交互式PowerShell窗口,并在该窗口中执行远程会话创建和连接命令,这样就能正常获得远程机器的交互式提示符。

完整代码示例

# 生成凭据对象
$password = ConvertTo-SecureString -String "password" -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PSCredential ("username", $password)

# 启动新的交互式PowerShell窗口,执行远程连接
Start-Process powershell.exe -ArgumentList @(
    "-NoExit",  # 连接成功后保持窗口打开
    "-Command", 
    '$session = New-PSSession -Credential $using:credentials -ComputerName "remote-computer"; Enter-PSSession -Session $session'
) -Wait

代码说明

  • -NoExit:确保远程会话连接成功后,PowerShell窗口不会自动关闭,保持交互状态。
  • $using:credentials:跨进程传递脚本中的凭据变量,让新进程能访问到预设的凭据信息。
  • -Wait:可选参数,让原脚本等待新窗口关闭后再继续执行(如果需要的话)。

替代方案:使用Invoke-Command的交互式模式(PowerShell 7+)

如果你使用的是PowerShell 7及以上版本,可以直接用Invoke-Command的-Interactive参数,无需额外启动进程:

$password = ConvertTo-SecureString -String "password" -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PSCredential ("username", $password)

Invoke-Command -ComputerName "remote-computer" -Credential $credentials -Interactive

这个命令会直接在当前会话中启动远程交互式会话,且在脚本中也能正常工作(PowerShell 7对非交互式环境的交互支持更完善)。

内容的提问来源于stack exchange,提问作者erikha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 05:40:26