-
Notifications
You must be signed in to change notification settings - Fork 0
/
set_shutdown.ps1
25 lines (20 loc) · 1.16 KB
/
set_shutdown.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# This has to run with administrator priviliges
# This code can be easily modified for other power states. For further info see: https://powershell.one/wmi/root/cimv2/win32_powermanagementevent
$query = "SELECT EventType FROM Win32_PowerManagementEvent"
$eventWatcher = New-Object System.Management.ManagementEventWatcher($query)
# Could be likely rewritten with Register-ObjectEvent
while ($true) {
$PWevent = $eventWatcher.waitForNextEvent()
# This ensures the newest version of config will be loaded. Make sure you don't change the TaskName in settings without clearing task scheduler and rerunning setup.ps1!
$config = Get-Content (Join-Path -Path $PSScriptRoot -ChildPath "settings.ini") | Where-Object {$_ -notmatch ";"} | ConvertFrom-StringData
# System goes to sleep
if ($PWevent."EventType" -eq 4) {
$time = New-ScheduledTaskTrigger -Once -At ((Get-Date).AddMinutes($config.Delay))
Set-ScheduledTask -TaskName $config.TaskName -Trigger $time
Enable-ScheduledTask -TaskName $config.TaskName
}
# System wakes up
elseif ($PWevent."EventType" -eq 7) {
Disable-ScheduledTask -TaskName $config.TaskName
}
}