Ich mag Bills Ansatz, aber er sagt Ihnen nicht, wie Sie sich für ein WMI-Event in PowerShell registrieren sollen. Hier erfahren Sie, wie Sie dies tun.
Wenn Sie möchten, dass Ihr Code nur ausgelöst wird, wenn sich der Systemstromstatus ändert, wie hier beschrieben , verwenden Sie diesen Code.
Register-WMIEvent -query "Select * From Win32_PowerManagementEvent" `
-sourceIdentifier "Power" `
-action {
#YourCodeHere
}
Dies wird nun ausgelöst, wenn sich der Stromstatus ändert, unabhängig davon, ob Sie das Gerät anschließen oder ausstecken. Vielleicht möchten Sie weiter anhalten und eine Pause einlegen, um die Frage zu stellen:
Bin ich an der Macht oder nicht?
Glücklicherweise können wir dies über die WMI-Klasse BatteryStatus
tun. Hier ist das vollständige Konstrukt, mit dem ich NUR eine Operation ausführe, wenn sich ein Energieereignis ändert, und dann nur, wenn ich nicht mehr mit Strom versorgt bin.
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()
}