Мені подобається підхід Білла, але він не розповідає вам, як зареєструватися на WMI-подію в PowerShell, ось ось як це зробити.
Якщо ви хочете, щоб ваш код запускався лише тоді, коли стан Power System змінюється, як описано тут , використовуйте цей код.
Register-WMIEvent -query "Select * From Win32_PowerManagementEvent" `
-sourceIdentifier "Power" `
-action {
#YourCodeHere
}
Тепер це буде спрацьовувати щоразу, коли стан живлення зміниться, чи ви підключите пристрій, чи відключіть його від мережі. Тому ви можете додатково зупинитись і зупинитись, щоб задати питання:
Я на владу чи ні?
На щастя, ми можемо це зробити за допомогою класу WMI BatteryStatus
, тому ось повний конструкт, який я використовую ТОЛЬКО для запуску операції, коли подія потужності змінюється, і то лише тоді, коли я більше не живлюсь.
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()
}