ฉันชอบวิธีการของ Bill แต่เขาไม่ได้บอกวิธีการลงทะเบียนสำหรับกิจกรรม WMI ใน PowerShell ดังนั้นนี่คือวิธีการทำ
หากคุณต้องการให้รหัสของคุณเรียกใช้เมื่อสถานะพลังงานของระบบเปลี่ยนไปตามที่อธิบายไว้ที่นี่ให้ใช้รหัสนี้
Register-WMIEvent -query "Select * From Win32_PowerManagementEvent" `
-sourceIdentifier "Power" `
-action {
#YourCodeHere
}
ทีนี้สิ่งนี้จะทริกเกอร์เมื่อใดก็ตามที่สถานะพลังงานเปลี่ยนแปลงไม่ว่าคุณจะเสียบอุปกรณ์หรือถอดปลั๊กออก ดังนั้นคุณอาจต้องการหยุดและหยุดชั่วคราวเพื่อถามคำถามเพิ่มเติม:
ฉันใช้พลังงานหรือไม่
โชคดีที่เราสามารถทำสิ่งนั้นผ่านคลาส WMI BatteryStatus
ดังนั้นนี่คือโครงสร้างที่สมบูรณ์ที่ฉันใช้เพื่อเรียกใช้การดำเนินการเมื่อเหตุการณ์พลังงานเปลี่ยนไปและจากนั้นก็ต่อเมื่อฉันไม่ได้ใช้พลังงานอีกต่อไป
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()
}