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