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

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

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

答案1

这里有一个非常简单的方法,只要调用进程传递 -NonInteractive 参数,它就可以工作。它可能不适用于所有情况,但正如 Dallas 上面提到的,还有其他更复杂的方法这个 Stackoverflow 问题

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

然后,您可以在脚本中使用该变量来执行类似以下操作删除颜色代码来自批处理作业输出。

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

相关内容