-
Notifications
You must be signed in to change notification settings - Fork 322
/
Set-WMIEventingForSet-DriverPackageXML.ps1
204 lines (156 loc) · 6.8 KB
/
Set-WMIEventingForSet-DriverPackageXML.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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
# Name: Get-DriverPackage
# Description: Gets the driver package ID for download during a Task Sequence
# Author: Matthew Teegarden
try
{
Function Main
{
# Function Started
LogTraceMessage "*** Function Main Started ***"
Write-Verbose "*** Function Main Started ***"
# Set Global Environment Variables (Inputs)
SetGlobalEnvVariables
# Import PS Modules
ImportPsModules
# Create and add more funcitons
# Create WMI EventFilter
WMI-InstanceFilter
# Create WMI InstanceConsumer
WMI-InstanceConsumer
# Create WMI FilterToConsumerBinding
WMI-FilterToConsumerBinding
# Function Finished
LogTraceMessage "*** Function Main Finished ***"
Write-Verbose "*** Function Main Finished ***"
}
Function SetGlobalEnvVariables
{
# Function Started
LogTraceMessage "*** Function SetGlobalEnvVariables Started ***"
Write-Verbose "*** Function SetGlobalEnvVariables Started ***"
# Base script variables. No modification should be necessary
# Set variables with global scope
$script:TraceState = ''
LogTraceMessage "Variable TraceState set to $script:TraceState"
Write-Verbose "Variable TraceState set to $script:TraceState"
$script:ErrorMessage = ''
LogTraceMessage "Variable ErrorMessage set to $script:ErrorMessage"
Write-Verbose "Variable ErrorMessage set to $script:ErrorMessage"
$script:ErrorState = 0
LogTraceMessage "Variable ErrorState set to $script:ErrorState"
Write-Verbose "Variable ErrorState set to $script:ErrorState"
#Script variables. Modify as necessary
$Script:LoggingPath = 'c:\Windows\Temp\Set-WMIEventingForSet-DriverPackageXML.log'
LogTraceMessage "Variable LoggingPath set to $script:LoggingPath"
Write-Verbose "Variable LoggingPath set to $script:LoggingPath"
# Add variables here
$Script:SiteServer = "TEE-CM1.EmptyGarden.btls"
LogTraceMessage "Variable SiteServer set to $script:SiteServer"
Write-Verbose "Variable SiteServer set to $script:SiteServer"
$Script:SiteCode = "TEE"
LogTraceMessage "Variable SiteCode set to $script:SiteCode"
Write-Verbose "Variable SiteCode set to $script:SiteCode"
$Script:ScriptPath = "\\TEE-CM1.EmptyGarden.btls\SCCMPackages$\OSD - Get-DriverPackage\Set-DriverPackageXML.ps1"
LogTraceMessage "Variable ScriptPath set to $script:ScriptPath"
Write-Verbose "Variable ScriptPath set to $script:ScriptPath"
# Function Finished
LogTraceMessage "*** Function SetGlobalEnvVariables Finished ***"
Write-Verbose "*** Function SetGlobalEnvVariables Finished ***"
}
Function ImportPsModules
{
# Function Started
LogTraceMessage "*** Function ImportPsModules Started ***"
Write-Verbose "*** Function ImportPsModules Started ***"
# Function Finished
LogTraceMessage "*** Function ImportPsModules Finished ***"
Write-Verbose "*** Function ImportPsModules Finished ***"
}
Function WMI-InstanceFilter
{
# Function Started
LogTraceMessage "*** Function WMI-InstanceFilter Started ***"
Write-Verbose "*** Function WMI-InstanceFilter Started ***"
$PropertyHash = @{
QueryLanguage = "WQL";
Query = "SELECT * FROM __InstanceOperationEvent Within 60 Where TargetInstance ISA 'SMS_Package' and TargetInstance.Name like 'Drivers - %'";
Name = "SCCM_DriverUpdateXML";
EventNameSpace="root/sms/site_$($SiteCode)"
}
$Script:InstanceFilter = New-CimInstance -Namespace root/subscription -ClassName __EventFilter -Property $PropertyHash -Verbose -ErrorAction Stop
# Function Finished
LogTraceMessage "*** Function WMI-InstanceFilter Finished ***"
Write-Verbose "*** Function WMI-InstanceFilter Finished ***"
}
Function WMI-InstanceConsumer
{
# Function Started
LogTraceMessage "*** Function WMI-InstanceConsumer Started ***"
Write-Verbose "*** Function WMI-InstanceConsumer Started ***"
$PropertyHash =@{
Name = "SCCM_DriverUpdateXML";
ExecutablePath = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe";
CommandLineTemplate="C:\Windows\\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -file `"$ScriptPath`""
}
$Script:InstanceConsumer = New-CimInstance -Namespace root/subscription -ClassName CommandLineEventConsumer -Property $PropertyHash -Verbose -ErrorAction Stop
# Function Finished
LogTraceMessage "*** Function WMI-InstanceConsumer Finished ***"
Write-Verbose "*** Function WMI-InstanceConsumer Finished ***"
}
Function WMI-FilterToConsumerBinding
{
# Function Started
LogTraceMessage "*** Function WMI-FilterToConsumerBinding Started ***"
Write-Verbose "*** Function WMI-FilterToConsumerBinding Started ***"
$PropertyHash = @{
Filter = [ref]$Script:InstanceFilter;
Consumer = [ref]$Script:InstanceConsumer
}
$InstanceBinding= New-CimInstance -Namespace root/subscription -ClassName __FilterToConsumerBinding -Property $PropertyHash -Verbose -ErrorAction Stop
# Function Finished
LogTraceMessage "*** Function WMI-FilterToConsumerBinding Finished ***"
Write-Verbose "*** Function WMI-FilterToConsumerBinding Finished ***"
}
Function LogTraceMessage ($strMessage)
{
[array]$script:TraceMessage += (Get-Date).ToString() + ': ' + $strMessage + '~~'
}
# Script Started
LogTraceMessage "*** Get-DriverPacakge ***"
Write-Verbose "*** Get-DriverPacakge ***"
#Main
Main
}
Catch
{
# Catch Started
LogTraceMessage "*** Catch Started ***"
Write-Verbose "*** Catch Started ***"
# Log error messages
$script:ErrorMessage = $Error[0].Exception.ToString()
LogTraceMessage "Variable ErrorMessage set to $script:ErrorMessage"
Write-Verbose "Variable ErrorMessage set to $script:ErrorMessage"
$script:ErrorState = 3
LogTraceMessage "Variable ErrorState set to $script:ErrorState"
Write-Verbose "Variable ErrorState set to $script:ErrorState"
# Catch Finished
LogTraceMessage "*** Catch Finished ***"
Write-Verbose "*** Catch Finished ***"
}
Finally
{
# Finally Started
LogTraceMessage "*** Finally Started ***"
Write-Verbose "*** Finally Started ***"
# Log Error State/Message
LogTraceMessage "Variable ErrorState = $script:ErrorState"
Write-Verbose "Variable ErrorState = $script:ErrorState"
# Finally Finished
LogTraceMessage "*** Finally Finished ***"
Write-Verbose "*** Finally Finished ***"
# Script Finished
LogTraceMessage "*** Get-DriverPacakge Finished ***"
Write-Verbose "*** Get-DriverPacakgefinished Finished ***"
# Write to log file
$script:TraceMessage | Out-File $script:LoggingPath
}