Los scripts de Powershell pueden terminarse fácilmente presionando ctrl-c. ¿Hay alguna forma de que un script de Powershell capture ctrl-c y le pida al usuario que confirme si realmente desea terminar el script?¿Hay alguna manera de atrapar ctrl-c y pedirle al usuario que confirme?
5
A
Respuesta
2
Pagar this post on the MSDN forums.
[console]::TreatControlCAsInput = $true
while ($true)
{
write-host "Processing..."
if ([console]::KeyAvailable)
{
$key = [system.console]::readkey($true)
if (($key.modifiers -band [consolemodifiers]"control") -and ($key.key -eq "C"))
{
Add-Type -AssemblyName System.Windows.Forms
if ([System.Windows.Forms.MessageBox]::Show("Are you sure you want to exit?", "Exit Script?", [System.Windows.Forms.MessageBoxButtons]::YesNo) -eq "Yes")
{
"Terminating..."
break
}
}
}
}
Si no desea utilizar una interfaz gráfica de usuario de mensaje para la confirmación, puede utilizar Read-Host en su lugar, o $ Host.UI.RawUI.ReadKey() como David mostró en su respuesta.
2
while ($true)
{
Write-Host "Do this, do that..."
if ($Host.UI.RawUI.KeyAvailable -and (3 -eq [int]$Host.UI.RawUI.ReadKey("AllowCtrlC,IncludeKeyUp,NoEcho").Character))
{
Write-Host "You pressed CTRL-C. Do you want to continue doing this and that?"
$key = $Host.UI.RawUI.ReadKey("NoEcho, IncludeKeyDown")
if ($key.Character -eq "N") { break; }
}
}
+0
Entonces, ¿tendría que envolver esto con todo mi código? –
+0
¿No interferiría con otro código que usa $ host.ui.rawui.readkey()? –
Cuestiones relacionadas
- 1. ¿Hay alguna manera de pedirle al Kernel de Linux que vuelva a ejecutar su código de inicialización de PCI?
- 2. ¿Hay alguna manera de atrapar la finalización de un evento de carga de archivos de sonido?
- 3. ¿Hay alguna manera de atrapar un intento de acceder a una propiedad o método inexistente?
- 4. ¿Hay alguna manera de atrapar el evento del botón Atrás en JavaScript?
- 5. ¿Hay alguna manera de atrapar todos los errores en un servicio web AJAX?
- 6. ¿Hay alguna manera de atrapar un evento WillRotateToInterfaceOrientation desde un UIView?
- 7. ¿Hay alguna manera de atrapar los mensajes enviados a cero en Objective-C?
- 8. Pedirle al usuario que descargue el archivo PDF en lugar de abrir
- 9. Eliminar hojas y evitar que Excel solicite al usuario que confirme, utilizando mensajes personalizados en su lugar
- 10. Pedirle al usuario que guarde/abra el archivo en ASP.NET C#
- 11. ¿Hay alguna manera de controlar el elemento NSMenuItem que se resalta inicialmente al abrir un menú?
- 12. ¿Hay alguna manera de acceder al hardware directamente en Python?
- 13. ¿Hay alguna manera de ingresar automáticamente al ejecutar un shell?
- 14. ¿Hay alguna manera de hacer que TFS se pueda enlazar?
- 15. ¿Hay alguna manera de dibujar gráficos y tablas en Android?
- 16. Pedirle al usuario que cierre la aplicación durante la desinstalación (en WiX)
- 17. ¿Hay alguna manera de sincronizar repositorios GIT y Subversion?
- 18. ¿Hay alguna manera de * completamente * desactivar Editar y Continuar?
- 19. Al ejecutar el Javascript de usuario invocado, ¿hay alguna manera de detectar y detener los scripts "problemáticos"?
- 20. ¿hay alguna manera de redirigir la entrada y la salida al mismo archivo?
- 21. ¿Alguna manera de distinguir entre "cuentas de usuario de personas" y "cuentas de usuario de computadora"?
- 22. ¿Hay alguna manera de comentar XAML que contiene comentarios?
- 23. ¿Hay alguna manera de despertar un hilo que duerme?
- 24. ¿Hay alguna manera fácil de hacer que ScrollViewer sea "hinchable"?
- 25. ¿Hay alguna manera de activar mousemove y obtener event.pageX, event.pageY?
- 26. ¿Hay alguna manera de hacer que UserControl sea inafocable?
- 27. ¿Hay alguna manera de mezclar MonoTouch y Objective-C?
- 28. ¿Hay alguna manera de omitir el parámetro?
- 29. ¿Hay alguna manera de que Apache log logre slow requests?
- 30. ¿Hay alguna manera de hacer que Guice Grapher trabaje?
Estoy buscando una manera de hacer lo contrario. Powershell SIEMPRE me pide que confirme la finalización. –
¿Cómo lo hiciste para eso? –
Así era cuando instalé Windows 7; ¡me vuelve loco! –