-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWindows_task_creator.ps1
More file actions
114 lines (93 loc) · 4.78 KB
/
Windows_task_creator.ps1
File metadata and controls
114 lines (93 loc) · 4.78 KB
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<#
Windows Task Creator
--------------------
Instructions:
- Place this script in the same directory as minecraft_server_manager.pyw and StopServer-And-Hibernate.ps1.
- Modify the configuration variables below to set your desired task times.
- Run this script from an elevated PowerShell prompt (Run as Administrator) to create the tasks.
- Start tasks are registered for the currently logged-on user when possible, otherwise they run as SYSTEM.
- By default, existing tasks starting with "MinecraftServerManager" will be removed before new tasks are registered.
#>
# --- User Configuration ---
$DailyStartTime = "06:00" # Daily start time
$MTThFStartTime = "14:30" # Monday, Tuesday, Thursday, Friday start time
$WedStartTime = "13:15" # Wednesday start time
$WeekdayStopTime = "08:00" # Weekday stop time
$DailyStopTime = "00:00" # Daily stop time
$RemoveExistingTasks = $true # Remove existing MinecraftServerManager* tasks?
# Sanitize times for use in task names (remove colon)
$DailyStartName = $DailyStartTime -replace ':', ''
$MTThFStartName = $MTThFStartTime -replace ':', ''
$WedStartName = $WedStartTime -replace ':', ''
$WeekdayStopName = $WeekdayStopTime -replace ':', ''
$DailyStopName = $DailyStopTime -replace ':', ''
# --- Derived Paths ---
$ServerRoot = $PSScriptRoot
$ManagerPyw = Join-Path $ServerRoot "minecraft_server_manager.pyw"
$StopScript = Join-Path $ServerRoot "StopServer-And-Hibernate.ps1"
# --- Common actions/principals/settings ---
$pywExe = Join-Path $env:SystemRoot "pyw.exe"
$psExe = "powershell.exe"
$startAction = New-ScheduledTaskAction -Execute $pywExe -Argument "`"$ManagerPyw`"" -WorkingDirectory $ServerRoot
$stopAction = New-ScheduledTaskAction -Execute $psExe -Argument "-NoProfile -ExecutionPolicy Bypass -File `"$StopScript`"" -WorkingDirectory $ServerRoot
$interactiveUser = (Get-CimInstance -ClassName Win32_ComputerSystem).UserName
if ([string]::IsNullOrWhiteSpace($interactiveUser)) {
# Fallback to SYSTEM if no interactive user is detected
$startPrincipal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
} else {
$startPrincipal = New-ScheduledTaskPrincipal -UserId $interactiveUser -LogonType Interactive -RunLevel Highest
}
$systemPrincipal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
$setStart = New-ScheduledTaskSettingsSet -WakeToRun:$true -AllowStartIfOnBatteries:$true
$setStop = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries:$true
# --- Remove existing tasks if requested ---
$TaskPrefix = "MinecraftServerManager"
if ($RemoveExistingTasks) {
Get-ScheduledTask | Where-Object { $_.TaskName -like "$TaskPrefix*" } | ForEach-Object {
Unregister-ScheduledTask -TaskName $_.TaskName -Confirm:$false
}
}
# --- Triggers ---
$trig_start_daily = New-ScheduledTaskTrigger -Daily -At $DailyStartTime
$trig_start_mtthf = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday,Tuesday,Thursday,Friday -At $MTThFStartTime
$trig_start_wed = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Wednesday -At $WedStartTime
$trig_stop_weekday = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday,Tuesday,Wednesday,Thursday,Friday -At $WeekdayStopTime
$trig_stop_daily = New-ScheduledTaskTrigger -Daily -At $DailyStopTime
$opt = @{ Force = $true }
# --- Register tasks ---
Register-ScheduledTask -TaskName "$TaskPrefix Start Daily $DailyStartName" `
-Action $startAction `
-Trigger $trig_start_daily `
-Principal $startPrincipal `
-Settings $setStart `
-Description "Wake and start server manager (auto-starts server)" `
@opt
Register-ScheduledTask -TaskName "$TaskPrefix Start MonTueThuFri $MTThFStartName" `
-Action $startAction `
-Trigger $trig_start_mtthf `
-Principal $startPrincipal `
-Settings $setStart `
-Description "Wake and start server manager (auto-starts server)" `
@opt
Register-ScheduledTask -TaskName "$TaskPrefix Start Wed $WedStartName" `
-Action $startAction `
-Trigger $trig_start_wed `
-Principal $startPrincipal `
-Settings $setStart `
-Description "Wake and start server manager (auto-starts server)" `
@opt
Register-ScheduledTask -TaskName "$TaskPrefix Stop Weekdays $WeekdayStopName (Hibernate)" `
-Action $stopAction `
-Trigger $trig_stop_weekday `
-Principal $systemPrincipal `
-Settings $setStop `
-Description "Graceful stop via stop.flag, wait for exit, then hibernate" `
@opt
Register-ScheduledTask -TaskName "$TaskPrefix Stop Daily $DailyStopName (Hibernate)" `
-Action $stopAction `
-Trigger $trig_stop_daily `
-Principal $systemPrincipal `
-Settings $setStop `
-Description "Graceful stop via stop.flag, wait for exit, then hibernate" `
@opt
Write-Host "All tasks created. Verify wake timers are enabled in Power Options."