Me encanta el enfoque de Bill, pero él no le dice cómo registrarse para un evento WMI en PowerShell, así que aquí le mostramos cómo hacerlo.
Si desea que su código se active solo cuando cambie el estado de alimentación del sistema, como se describe aquí , use este código.
Register-WMIEvent -query "Select * From Win32_PowerManagementEvent" `
-sourceIdentifier "Power" `
-action {
#YourCodeHere
}
Ahora, esto se activará cada vez que cambie el estado de alimentación, ya sea que conecte el dispositivo, O lo desenchufe. Por lo tanto, es posible que desee parar y hacer una pausa para hacer la pregunta:
¿Estoy en el poder o no?
Afortunadamente, podemos hacerlo a través de la clase WMI BatteryStatus
, así que aquí está la construcción completa que uso para ejecutar SOLO una operación cuando cambia un evento de energía, y luego solo si ya no estoy en Energía.
Register-WMIEvent -query "Select * From Win32_PowerManagementEvent" `
-sourceIdentifier "Power" `
-action {
if ([BOOL](Get-WmiObject -Class BatteryStatus -Namespace root\wmi).PowerOnLine ){
#Device is plugged in now, do this action
write-host "Power on!"
}
else{
#Device is NOT plugged in now, do this action
write-host "Now on battery, locking..."
[NativeMethods]::LockWorkStation()
}