2010-12-06 10 views
24

Me gustaría utilizar PowerShell para comprobar si existe una aplicación web IIS (o potencialmente algún otro tipo de elemento). Puedo hacer esto con Get-Item, pero eso informa un error si el elemento no existe, lo cual es engañoso para el usuario que ejecuta el script: parece que algo salió mal cuando en realidad todo está bien.Compruebe si existe un artículo sin un error si no existe

¿Cómo hago esto sin un error?

Respuesta

26

Utilice el comando ... get-item blah -ErrorAction SilentlyContinue

alt text

+6

'-ErrorAction SilentlyContinue' se puede acortar a' -ea si', 'dir app_offline.htm -ea si | del' – yzorg

+4

Por razones de legibilidad, no abreviaría en un script (según la pregunta). – Vimes

+0

Estrictamente hablando, esta no es una respuesta a la pregunta, la respuesta de la ruta de prueba a continuación es un cheque real – SteveC

50

El cmdlet Test-Path está diseñado específicamente para esto, se determina si existen elementos de un camino. Devuelve un valor booleano y no genera un error.

El cmdlet Get-Item (y similar) se puede utilizar también, pero no directamente. Una forma ya está propuesta: use -ErrorAction SilentlyContinue. Puede ser importante saber que de hecho todavía genera un error; simplemente no lo muestra. Compruebe la colección de errores $Error después del comando, el error está allí.


Una información

Hay una manera divertida para evitar este error (que también funciona con otros cmdlets como Get-Process que no tienen una alternativa Test-Path). Supongamos que estamos a punto de verificar la existencia de un elemento "MyApp.exe" (o un proceso "MyProcess"). A continuación, estos comandos no retorno de los objetivos que faltan y, al mismo tiempo que generan ningún error:

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

Estos cmdlets no generan errores para los objetivos de comodín. Y usamos estos divertidos comodines que en realidad coinciden con elementos individuales.

+0

¡Este sería mi enfoque! También vale la pena señalar, es que puede hacer eco de los buenos hallazgos con este método, y no obtener errores rojos para los archivos que no existen. if (Test-path $ Test) {write-host $ Test} De manera predeterminada, un elemento que no existe no tendrá un evento, por lo que no se mostrará nada, o se suprimirá el falso. –

+0

Este es el mejor enfoque para la pregunta –