-
Notifications
You must be signed in to change notification settings - Fork 0
/
patchtuesday.ps1
112 lines (75 loc) · 4.26 KB
/
patchtuesday.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
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
# Used to catch servers not patched by SCCM and to automate what server list is patching
# Find Patch Tuesday (2nd Tuesday of the month)
[DateTime]$date = Get-Date -Format "MM-01-yyyy"
switch ($date.DayOfWeek){
"Sunday" {$patchTuesday = 9}
"Monday" {$patchTuesday = 8}
"Tuesday" {$patchTuesday = 7}
"Wednesday" {$patchTuesday = 13}
"Thursday" {$patchTuesday = 12}
"Friday" {$patchTuesday = 11}
"Saturday" {$patchTuesday = 10}
}
# Patching Server Pilot – Auto Patch & Auto-Restart / Nightly maintenance window [10PM to 5AM]
$patchStart = (Get-Date $date).AddDays($patchTuesday).AddHours(22)
$patchEnd = (Get-Date $patchStart).AddHours(7)
# Figure out what time it is
$currentDate = Get-Date
$startDT = $PatchStart.ToString("s")
$endDT = $PatchEnd.ToString("s")
$SendNotificationStartTime=$PatchStart.AddDays(-1).AddHours(-14)
$SendNotificationEndTime=$SendNotificationStartTime.AddMinutes(45)
if(([DateTime]($currentDate) -ge $SendNotificationStartTime) -and ([DateTime]($currentDate) -le $SendNotificationEndTime )){$Patching = "True"}else{$Patching = "False"}
if ($Patching -eq "True") {
if (Test-Path D:\CRON\PatchAdams\servers.txt)
{remove-item -force D:\CRON\PatchAdams\servers.txt}
copy-item -force -path D:\CRON\PatchAdams\serverpilot.txt -destination D:\CRON\PatchAdams\servers.txt
if (Test-Path D:\CRON\PatchAdams\count18.txt)
{remove-item -force D:\CRON\PatchAdams\count18.txt}
$Patching = "False"
}
# Patching All Test/Dev & VM-XXX/DP-XXX Odds/DC Odds – Auto-Patch & Auto-Restart / +4 days after Patch Tuesday which will be the 2nd or 3rd weekend of the month [Saturday 10PM to Sunday 5AM] – Auto-patch and Auto-restart
$patchStart = (Get-Date $date).AddDays($patchTuesday + 4).AddHours(22)
$patchEnd = (Get-Date $patchStart).AddHours(7)
$currentDate = Get-Date
$startDT = $PatchStart.ToString("s")
$endDT = $PatchEnd.ToString("s")
$SendNotificationStartTime=$PatchStart.AddDays(-1).AddHours(-14)
$SendNotificationEndTime=$SendNotificationStartTime.AddMinutes(45)
if(([DateTime]($currentDate) -ge $SendNotificationStartTime) -and ([DateTime]($currentDate) -le $SendNotificationEndTime )){$Patching= "True"}else{$Patching = "False"}
if ($Patching -eq "True"){
if (Test-Path D:\CRON\PatchAdams\servers.txt)
{remove-item -force D:\CRON\PatchAdams\servers.txt}
copy-item -force -path D:\CRON\PatchAdams\serverplus4.txt -destination D:\CRON\PatchAdams\servers.txt
$Patching = "False"
}
# _DC/CM (All) & VM-XXX/DP-XXX Evens - Auto-patch and Auto-restart
$patchStart = (Get-Date $date).AddDays($patchTuesday + 11).AddHours(22)
$patchEnd = (Get-Date $patchStart).AddHours(7)
$currentDate = Get-Date
$startDT = $PatchStart.ToString("s")
$endDT = $PatchEnd.ToString("s")
$SendNotificationStartTime=$PatchStart.AddDays(-1).AddHours(-14)
$SendNotificationEndTime=$SendNotificationStartTime.AddMinutes(45)
if(([DateTime]($currentDate) -ge $SendNotificationStartTime) -and ([DateTime]($currentDate) -le $SendNotificationEndTime )){$Patching = "True"}else{$Patching = "False"}
if ($Patching -eq "True") {
if (Test-Path D:\CRON\PatchAdams\servers.txt)
{remove-item -force D:\CRON\PatchAdams\servers.txt}
copy-item -force -path D:\CRON\PatchAdams\serverplus11.txt -destination D:\CRON\PatchAdams\servers.txt
$Patching = "False"
}
# _Production Servers – Auto-Patch & Auto-Restart
$patchStart = (Get-Date $date).AddDays($patchTuesday + 18).AddHours(22)
$patchEnd = (Get-Date $patchStart).AddHours(7)
$currentDate = Get-Date
$startDT = $PatchStart.ToString("s")
$endDT = $PatchEnd.ToString("s")
$SendNotificationStartTime=$PatchStart.AddDays(-2).AddHours(-14)
$SendNotificationEndTime=$SendNotificationStartTime.AddMinutes(45)
if(([DateTime]($currentDate) -ge $SendNotificationStartTime) -and ([DateTime]($currentDate) -le $SendNotificationEndTime )){$Patching = "True"}else{$Patching = "False"}
if ($Patching -eq "True"){
if (Test-Path D:\CRON\PatchAdams\servers.txt)
{remove-item -force D:\CRON\PatchAdams\servers.txt}
copy-item -force -path D:\CRON\PatchAdams\serverplus18.txt -destination D:\CRON\PatchAdams\servers.txt
$Patching = "False"
}