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()
}