2010-12-06 14 views
24

Ich möchte mit PowerShell überprüfen, ob eine IIS-Webanwendung existiert (oder möglicherweise eine andere Art von Element). Ich kann dies mit Get-Item tun, aber das meldet einen Fehler, wenn das Element nicht existiert, was für den Benutzer, der das Skript ausführt, irreführend ist - es sieht so aus, als wäre etwas schiefgelaufen, wenn eigentlich alles in Ordnung ist.Überprüfen Sie, ob ein Element ohne Fehler existiert, wenn es nicht existiert

Wie mache ich das ohne Fehler?

Antwort

26

Verwenden Sie den Befehl ... get-item blah -ErrorAction SilentlyContinue

alt text

+6

'-ErrorAction SilentlyContinue' kann auf '-ea si',' dir app_offline.htm -ea si | verkürzt werden del' – yzorg

+4

Aus Gründen der Lesbarkeit würde ich nicht in einem Skript abkürzen (pro Frage). – Vimes

+0

Streng genommen ist dies keine Antwort auf die Frage, die Test-Path-Antwort unten ist eine tatsächliche Überprüfung – SteveC

50

Das Cmdlet Test-Path speziell dafür ausgelegt ist, bestimmt sie, ob Elemente eines Pfads vorhanden sind. Es gibt einen booleschen Wert zurück und erzeugt keinen Fehler.

Das Cmdlet Get-Item (und ähnliche) kann auch verwendet werden, aber nicht direkt. Ein Weg ist bereits vorgeschlagen: Verwenden Sie -ErrorAction SilentlyContinue. Es ist vielleicht wichtig zu wissen, dass es tatsächlich immer noch einen Fehler erzeugt; es zeigt es einfach nicht. Überprüfen Sie die Fehlerauflistung $Error nach dem Befehl, der Fehler ist da.


Nur zur Information

Es ist eine lustige Art und Weise, diesen Fehler zu vermeiden (es funktioniert auch mit einigen anderen Cmdlets wie Get-Process, die keine Test-Path Alternative haben). Angenommen, wir prüfen, ob ein Element "MyApp.exe" (oder ein Prozess "MyProcess") vorhanden ist. Dann werden diese Befehle geben nichts auf fehlende Ziele und zugleich erzeugen sie keine Fehler:

Get-Item "[M]yApp.exe" 
Get-Process "[M]yProcess" 

Diese Cmdlets erzeugen keine Fehler für Wildcard-Ziele. Und wir benutzen diese lustigen Wildcards, die tatsächlich einzelne Gegenstände zusammenbringen.

+0

Dies wäre mein Ansatz! Es ist auch erwähnenswert, dass Sie die guten Funde mit dieser Methode aussprechen können und keine roten Fehler für Dateien erhalten, die nicht existieren. if (Testpfad $ Test) {write-host $ Test} Ein Element, das nicht existiert, wird standardmäßig kein Ereignis haben, so dass nichts angezeigt wird oder das Falsche unterdrückt wird. –

+0

Dies ist der beste Ansatz für die Frage –

Verwandte Themen