J'adore l'approche de Bill, mais il ne vous dit pas comment vous inscrire à un événement WMI dans PowerShell, alors voici comment le faire.
Si vous souhaitez que votre code ne se déclenche que lorsque l'état de l'alimentation du système change, comme décrit ici , utilisez ce code.
Register-WMIEvent -query "Select * From Win32_PowerManagementEvent" `
-sourceIdentifier "Power" `
-action {
#YourCodeHere
}
Maintenant, cela se déclenchera chaque fois que l'état d'alimentation changera, que vous branchiez l'appareil ou le débranchiez. Donc, vous voudrez peut-être arrêter et vous arrêter pour poser la question:
Suis-je au pouvoir ou non?
Heureusement, nous pouvons le faire via la classe WMI BatteryStatus
, alors voici la construction complète que j'utilise pour exécuter UNIQUEMENT une opération lorsqu'un événement d'alimentation change, et seulement si je ne suis plus sous tension.
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()
}