Powershell - 対話モードで実行されているかどうかを検出する

Powershell - 対話モードで実行されているかどうかを検出する

PowerShell プロファイルから、PowerShell が対話的に呼び出されたかどうかを検出することは可能ですか? 使用している人もいます$host.nameが、常に が返されるようですConsoleHost

答え1

これは、呼び出しプロセスが -NonInteractive パラメータを渡す限り機能する、$PROFILE に記述する非常にシンプルな方法です。すべての場合に機能するわけではありませんが、ダラスが上で述べたように、より複雑な方法もあります。この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
}

関連情報