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

如何判断PowerShell处于REPL模式还是通过“用PowerShell运行”执行?

检测PowerShell脚本的运行方式(右键“用PowerShell运行” vs 交互式Shell执行)

可以通过内置变量和环境属性的组合判断脚本的运行方式,核心是区分临时启动的非交互式PowerShell进程(右键运行场景)和交互式REPL会话(手动打开PowerShell后执行脚本的场景)。

核心判断逻辑

右键“用PowerShell运行”脚本时,PowerShell会以非交互式模式启动,直接加载执行脚本,没有用户输入的命令行记录;而在交互式Shell中执行时,会有明确的命令行执行记录,且会话处于交互式状态。

实现代码

将以下代码添加到脚本末尾,即可实现按需暂停:

# 判断是否为右键"用PowerShell运行"的场景
$isRightClickLaunch = [string]::IsNullOrEmpty($MyInvocation.Line) -and (-not $Host.Interactive)

# 补充判断:通过`powershell.exe -File 脚本路径`启动的场景(和右键运行行为一致)也触发暂停
if (-not $isRightClickLaunch) {
    $isRightClickLaunch = [Environment]::CommandLine -match '-File\s+["'']?[^"''\s]+["'']?$' -and (-not $Host.Interactive)
}

if ($isRightClickLaunch) {
    Write-Host "脚本执行完成,按任意键退出..."
    $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
} else {
    Write-Host "脚本执行完成"
}

关键变量说明

  • $MyInvocation.Line:存储触发脚本执行的命令行内容,右键运行时该值为空(无用户输入的执行命令)。
  • $Host.Interactive:标记当前PowerShell会话是否为交互式,右键运行时为$false,手动打开的Shell中为$true。
  • [Environment]::CommandLine:获取启动当前PowerShell进程的完整命令行,右键运行时会包含-File参数指向脚本路径。

补充说明

如果用户手动在命令行用powershell.exe -File .\myscript.ps1启动脚本,这种场景下窗口也会在脚本结束后关闭,上述逻辑会自动触发暂停,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:00:56