Adoro a abordagem de Bill, mas ele não diz como se registrar para um evento WMI no PowerShell, então veja como fazê-lo.
Se você deseja que seu código seja acionado apenas quando o estado de energia do sistema for alterado, conforme descrito aqui , use esse código.
Register-WMIEvent -query "Select * From Win32_PowerManagementEvent" `
-sourceIdentifier "Power" `
-action {
#YourCodeHere
}
Agora, isso será acionado sempre que o estado de energia mudar, se você conectar o dispositivo ou desconectá-lo. Portanto, você pode querer parar e fazer uma pausa para fazer a pergunta:
Estou no poder ou não?
Felizmente, podemos fazer isso por meio da classe WMI BatteryStatus
, então aqui está a construção completa que eu uso para executar SOMENTE uma operação quando um evento de energia é alterado e somente se não estiver mais no 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()
}