Tôi thích cách tiếp cận của Bill, nhưng anh ấy không cho bạn biết cách đăng ký Sự kiện WMI trong PowerShell, vì vậy đây là cách thực hiện.
Nếu bạn muốn mã của mình chỉ kích hoạt khi Trạng thái nguồn hệ thống thay đổi, như được mô tả ở đây , hãy sử dụng mã này.
Register-WMIEvent -query "Select * From Win32_PowerManagementEvent" `
-sourceIdentifier "Power" `
-action {
#YourCodeHere
}
Bây giờ, điều này sẽ kích hoạt bất cứ khi nào trạng thái nguồn thay đổi, cho dù bạn cắm thiết bị vào, HOẶC rút phích cắm thiết bị. Vì vậy, bạn có thể muốn dừng lại và tạm dừng để đặt câu hỏi:
Tôi có quyền lực hay không?
May mắn thay, chúng ta có thể thực hiện điều đó thông qua Lớp WMI BatteryStatus
, vì vậy đây là cấu trúc đầy đủ mà tôi sử dụng để CHỈ chạy một hoạt động khi sự kiện điện thay đổi, và sau đó chỉ khi tôi không còn bật Nguồn nữa.
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()
}