Powershell - Erkennen, ob im interaktiven Modus ausgeführt wird oder nicht

Powershell - Erkennen, ob im interaktiven Modus ausgeführt wird oder nicht

Ist es möglich, anhand eines Powershell-Profils zu erkennen, ob Powershell interaktiv aufgerufen wurde oder nicht? Ich sehe, dass einige Leute es verwenden, $host.nameaber es scheint immer zurückzukommen ConsoleHost.

Antwort1

Hier ist eine sehr einfache Methode, die Sie in Ihr $PROFILE einfügen können und die funktioniert, solange der aufrufende Prozess den Parameter -NonInteractive übergibt. Sie funktioniert möglicherweise nicht mit allem, aber wie Dallas oben erwähnt hat, gibt es andere, komplexere Methoden aufdiese Stackoverflow-Frage.

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

Sie können diese Variable dann in Ihren Skripten verwenden, um beispielsweise Folgendes zu tun:Farbcodes entfernenaus der Batch-Job-Ausgabe.

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

verwandte Informationen