Beim Schreiben von PowerShell-Skripten habe ich festgestellt, dass bei bestimmten Cmdlets Probleme auftreten. Dabei wird eine interaktive Eingabeaufforderung angezeigt. Als Beispiel wird "Remove-Item" in einem nicht leeren Verzeichnis angezeigt. Dies ist tödlich, wenn Sie versuchen, Aufgaben zu automatisieren. Ich würde es vorziehen, wenn die Aktion einfach fehlschlägt und entweder eine Ausnahme auslöst oder einen fehlerhaften Rückkehrcode zurückgibt, damit das gesamte Skript nicht auf eine Antwort wartet.
Gibt es eine Möglichkeit, PowerShell zum automatischen Fehlschlagen zu zwingen, anstatt Benutzereingaben für Aktionen zu suchen?
powershell
Chuu
quelle
quelle
Remove-Item
schnell scheitern lassen?" Umbenennen.Antworten:
Die von Eris vorgeschlagene Lösung startet effektiv eine andere PowerShell-Instanz. Eine alternative Möglichkeit, dies mit einfacherer Syntax zu tun, besteht darin, auf eine andere Instanz von Powershell.exe zuzugreifen.
quelle
Siehe
Get-Help about_Preference_Variables
:So:
quelle
Remove-ADUser
(Server 2012R)Ok, das ist wirklich hässlich, aber heilige Senfflecken es "funktioniert".
Probleme:
Dies funktioniert nur für den einfachen Fall (Befehle, die mit der aktuellen Umgebung nicht viel zu tun haben). Ich habe nichts Komplexes getestet
$MyPS = [Powershell]::Create()
$MyPS.Commands.AddCommand("Remove-Item")
$MyPS.Commands.AddParameter("Path", "D:\Temp\t")
$MyPS.Invoke()
Ausgabe:
quelle
Alle oben genannten Lösungen sind für mich fehlgeschlagen, als ich ein Verzeichnis erstellt habe. Dies bedeutete, dass ich aufgefordert wurde, jedes einzelne Verzeichnis, das mein Skript erstellt hat, zu bestätigen - was sehr viel war. Was für mich funktioniert hat, war apped | Out-null, um die Ergebnisse an Out-Null weiterzuleiten
Beachten Sie, dass $ Directory eine Zeichenfolge mit dem vollständigen Pfad zu dem Verzeichnis ist, das Sie erstellen möchten. Hoffe das spart jemandem etwas Zeit: P.
quelle
Ich schlage zwei Techniken vor
a) Anhängen
-force
b) Anhängen
-errorAction silently continue
So recherchiere ich, welche Cmdlets einen bestimmten Parameter unterstützen
quelle
-errorAction SilentlyContinue
ist-ea 0
.