
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.name
aber 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
}