Uwielbiam podejście Billa, ale on nie mówi ci, jak zarejestrować się na zdarzenie WMI w PowerShell, więc oto jak to zrobić.
Jeśli chcesz, aby kod był wyzwalany tylko po zmianie stanu zasilania systemu, jak opisano tutaj , użyj tego kodu.
Register-WMIEvent -query "Select * From Win32_PowerManagementEvent" `
-sourceIdentifier "Power" `
-action {
#YourCodeHere
}
Teraz uruchomi się za każdym razem, gdy zmieni się stan zasilania, niezależnie od tego, czy podłączysz urządzenie, czy je odłączysz. Możesz więc chcieć zatrzymać się i zatrzymać, aby zadać pytanie:
Czy mam moc, czy nie?
Na szczęście możemy to zrobić za pomocą klasy WMI BatteryStatus
, więc oto pełna konstrukcja, której używam, aby WYŁĄCZNIE uruchamiać operację, gdy zmienia się zdarzenie mocy, i tylko wtedy, gdy nie mam już zasilania.
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()
}