You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
if ($DesiredValues.GetType().FullName -notin$types)
110
+
{
111
+
throw ("Property 'DesiredValues' in Test-DscParameterState must be either a Hashtable or CimInstance. Type detected was $($DesiredValues.GetType().FullName)")
112
+
}
113
+
114
+
if ($DesiredValues-is [Microsoft.Management.Infrastructure.CimInstance] -and-not$ValuesToCheck)
115
+
{
116
+
throw ("If 'DesiredValues' is a CimInstance then property 'ValuesToCheck' must contain a value")
if ($currentType.Name-ne'Unknown'-and$desiredType.Name-eq'PSCredential')
155
+
{
156
+
# This is a credential object. Compare only the user name
157
+
if ($currentType.Name-eq'PSCredential'-and$CurrentValues.$key.UserName-eq$desiredValuesClean.$key.UserName)
158
+
{
159
+
Write-Verbose-Message ('MATCH: PSCredential username match. Current state is {0} and desired state is {1}'-f$CurrentValues.$key.UserName,$desiredValuesClean.$key.UserName)
160
+
continue
161
+
}
162
+
else
163
+
{
164
+
Write-Verbose-Message ('NOTMATCH: PSCredential username mismatch. Current state is {0} and desired state is {1}'-f$CurrentValues.$key.UserName,$desiredValuesClean.$key.UserName)
165
+
$returnValue=$false
166
+
}
167
+
168
+
# Assume the string is our username when the matching desired value is actually a credential
169
+
if ($currentType.Name-eq'string'-and$CurrentValues.$key-eq$desiredValuesClean.$key.UserName)
170
+
{
171
+
Write-Verbose-Message ('MATCH: PSCredential username match. Current state is {0} and desired state is {1}'-f$CurrentValues.$key,$desiredValuesClean.$key.UserName)
172
+
continue
173
+
}
174
+
else
175
+
{
176
+
Write-Verbose-Message ('NOTMATCH: PSCredential username mismatch. Current state is {0} and desired state is {1}'-f$CurrentValues.$key,$desiredValuesClean.$key.UserName)
177
+
$returnValue=$false
178
+
}
179
+
}
180
+
181
+
if (-not$TurnOffTypeChecking)
182
+
{
183
+
if (($desiredType.Name-ne'Unknown'-and$currentType.Name-ne'Unknown') -and
184
+
$desiredType.FullName-ne$currentType.FullName)
185
+
{
186
+
Write-Verbose-Message "NOTMATCH: Type mismatch for property '$key' Current state type is '$($currentType.Name)' and desired type is '$($desiredType.Name)'"
187
+
continue
188
+
}
189
+
}
190
+
191
+
if ($CurrentValues.$key-eq$desiredValuesClean.$key-and-not$desiredType.IsArray)
192
+
{
193
+
Write-Verbose-Message "MATCH: Value (type $($desiredType.Name)) for property '$key' does match. Current state is '$($CurrentValues.$key)' and desired state is '$($desiredValuesClean.$key)'"
194
+
continue
195
+
}
196
+
197
+
if ($desiredValuesClean.GetType().Name -in'HashTable','PSBoundParametersDictionary')
Write-Verbose-Message "MATCH: Value (type $($desiredType.Name)) for property '$key' does match. Current state is '$($CurrentValues.$key)' and desired state is '$($desiredValuesClean.$key)'"
209
+
continue
210
+
}
211
+
212
+
if ($desiredType.IsArray)
213
+
{
214
+
Write-Verbose-Message "Comparing values in property '$key'"
215
+
if (-not$CurrentValues.ContainsKey($key) -or-not$CurrentValues.$key)
216
+
{
217
+
Write-Verbose-Message "NOTMATCH: Value (type $($desiredType.Name)) for property '$key' does not match. Current state is '$($CurrentValues.$key)' and desired state is '$($desiredValuesClean.$key)'"
Write-Verbose-Message "NOTMATCH: Value (type $($desiredType.Name)) for property '$key' does have a different count. Current state count is '$($CurrentValues.$key.Count)' and desired state count is '$($desiredValuesClean.$key.Count)'"
224
+
$returnValue=$false
225
+
continue
226
+
}
227
+
else
228
+
{
229
+
$desiredArrayValues=$DesiredValues.$key
230
+
$currentArrayValues=$CurrentValues.$key
231
+
232
+
for ($i=0; $i-lt$desiredArrayValues.Count; $i++)
233
+
{
234
+
if ($null-ne$desiredArrayValues[$i])
235
+
{
236
+
$desiredType=$desiredArrayValues[$i].GetType()
237
+
}
238
+
else
239
+
{
240
+
$desiredType= [psobject]@{
241
+
Name='Unknown'
242
+
}
243
+
}
244
+
245
+
if ($null-ne$currentArrayValues[$i])
246
+
{
247
+
$currentType=$currentArrayValues[$i].GetType()
248
+
}
249
+
else
250
+
{
251
+
$currentType= [psobject]@{
252
+
Name='Unknown'
253
+
}
254
+
}
255
+
256
+
if (-not$TurnOffTypeChecking)
257
+
{
258
+
if (($desiredType.Name-ne'Unknown'-and$currentType.Name-ne'Unknown') -and
259
+
$desiredType.FullName-ne$currentType.FullName)
260
+
{
261
+
Write-Verbose-Message "`tNOTMATCH: Type mismatch for property '$key' Current state type of element [$i] is '$($currentType.Name)' and desired type is '$($desiredType.Name)'"
262
+
$returnValue=$false
263
+
continue
264
+
}
265
+
}
266
+
267
+
if ($desiredArrayValues[$i] -ne$currentArrayValues[$i])
268
+
{
269
+
Write-Verbose-Message "`tNOTMATCH: Value [$i] (type $($desiredType.Name)) for property '$key' does match. Current state is '$($currentArrayValues[$i])' and desired state is '$($desiredArrayValues[$i])'"
270
+
$returnValue=$false
271
+
continue
272
+
}
273
+
else
274
+
{
275
+
Write-Verbose-Message "`tMATCH: Value [$i] (type $($desiredType.Name)) for property '$key' does match. Current state is '$($currentArrayValues[$i])' and desired state is '$($desiredArrayValues[$i])'"
276
+
continue
277
+
}
278
+
}
279
+
280
+
}
281
+
}
282
+
else
283
+
{
284
+
if ($desiredValuesClean.$key-ne$CurrentValues.$key)
285
+
{
286
+
Write-Verbose-Message "NOTMATCH: Value (type $($desiredType.Name)) for property '$key' does not match. Current state is '$($CurrentValues.$key)' and desired state is '$($desiredValuesClean.$key)'"
287
+
$returnValue=$false
288
+
}
289
+
290
+
}
291
+
}
292
+
293
+
Write-Verbose-Message "Result is '$returnValue'"
294
+
return$returnValue
295
+
}
296
+
297
+
<#
298
+
.SYNOPSIS
299
+
Tests of an object has a property
300
+
.PARAMETERObject
301
+
The object to test
302
+
.PARAMETERPropertyName
303
+
The property name
304
+
#>
305
+
functionTest-DSCObjectHasProperty
306
+
{
307
+
[CmdletBinding()]
308
+
[OutputType([bool])]
309
+
param
310
+
(
311
+
[Parameter(Mandatory=$true)]
312
+
[object]
313
+
$Object,
314
+
315
+
[Parameter(Mandatory=$true)]
316
+
[string]
317
+
$PropertyName
318
+
)
319
+
320
+
if ($Object.PSObject.Properties.Name-contains$PropertyName)
321
+
{
322
+
return [bool] $Object.$PropertyName
323
+
}
324
+
325
+
return$false
326
+
}
327
+
328
+
<#
329
+
.SYNOPSIS
330
+
Creates and throws an invalid argument exception
331
+
332
+
.PARAMETERMessage
333
+
The message explaining why this error is being thrown
334
+
335
+
.PARAMETERArgumentName
336
+
The name of the invalid argument that is causing this error to be thrown
0 commit comments