Al escribir scripts de PowerShell, noté que cuando ciertos cmdlets encuentran problemas, aparecen un mensaje interactivo, Remove-Item en un directorio no vacío como ejemplo. Esto es mortal cuando intento automatizar tareas, prefiero que la acción simplemente falle y arroje una excepción o devuelva un código de retorno incorrecto para que todo el script no esté bloqueado esperando una respuesta.
¿Hay alguna forma de obligar a PowerShell a fallar automáticamente en lugar de buscar la entrada del usuario en las acciones?
powershell
Chuu
fuente
fuente
Remove-Item
falle rápidamente?"Respuestas:
La solución propuesta por Eris efectivamente inicia otra instancia de PowerShell. Una forma alternativa de hacer esto, con una sintaxis más simple, es utilizar otra instancia de powershell.exe.
fuente
Ver
Get-Help about_Preference_Variables
:Entonces:
fuente
Remove-ADUser
(Server 2012R)Ok, esto es realmente feo, pero la mostaza santa mancha que "funciona".
Cuestiones:
Esto solo funcionará para el caso Simple (comandos que no hacen muchas cosas con el entorno actual). No he probado nada complejo
$MyPS = [Powershell]::Create()
$MyPS.Commands.AddCommand("Remove-Item")
$MyPS.Commands.AddParameter("Path", "D:\Temp\t")
$MyPS.Invoke()
Salida:
fuente
Todas las soluciones anteriores fallaron cuando creé un directorio, lo que significaba que se me solicitó que aprobara cada directorio que creó mi script, lo cual fue mucho. Lo que funcionó para mí fue apped | Out-null para canalizar los resultados a Out-Null
Tenga en cuenta que $ Directory es una cadena con la ruta completa al directorio que desea crear. Espero que esto ahorre algo de tiempo a alguien: P
fuente
Sugiero dos técnicas
a) Anexar
-force
b) Anexar
-errorAction silently continue
Así es como investigo qué cmdlets admiten un parámetro particular
fuente
-errorAction SilentlyContinue
es-ea 0
.