Powershell - 检测是否以交互模式运行

xdh*_*ore 5 powershell

是否可以从 powershell 配置文件中检测 powershell 是否已被交互调用?我看到有些人使用$host.name但它似乎总是返回ConsoleHost

ver*_*yth 1

这是一个非常简单的方法,只要调用进程传递 -NonInteractive 参数,就可以将其放入 $PROFILE 中。它可能不适用于所有情况,但正如达拉斯上面提到的,在这个 Stackoverflow 问题上还有其他更复杂的方法。

if ([Environment]::GetCommandLineArgs().Contains('-NonInteractive')) {
    $Global:InteractiveMode=$false
} else {
    $Global:InteractiveMode=$true
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以在脚本中使用该变量来执行一些操作,例如从批处理作业输出中删除颜色代码

if (-not $InteractiveMode) {
    # For PWSH 7.2+
    $PSStyle.OutputRendering = [System.Management.Automation.OutputRendering]::PlainText
}
Run Code Online (Sandbox Code Playgroud)