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)
87
+
{
88
+
throw ("Property 'DesiredValues' in Test-DscParameterState must be either a Hashtable or CimInstance. Type detected was $($DesiredValues.GetType().Name)")
89
+
}
90
+
91
+
if ($DesiredValues.GetType().FullName -eq'Microsoft.Management.Infrastructure.CimInstance'-and-not$ValuesToCheck)
92
+
{
93
+
throw ("If 'DesiredValues' is a CimInstance then property 'ValuesToCheck' must contain a value")
if ($currentType.Name-ne'Unknown'-and$desiredType.Name-eq'PSCredential')
128
+
{
129
+
# This is a credential object. Compare only the user name
130
+
if ($currentType.Name-eq'PSCredential'-and$CurrentValues.$key.UserName-eq$DesiredValuesClean.$key.UserName)
131
+
{
132
+
Write-Verbose-Message ('MATCH: PSCredential username match. Current state is {0} and desired state is {1}'-f$CurrentValues.$key.UserName,$DesiredValuesClean.$key.UserName)
133
+
continue
134
+
}
135
+
else
136
+
{
137
+
Write-Verbose-Message ('NOTMATCH: PSCredential username mismatch. Current state is {0} and desired state is {1}'-f$CurrentValues.$key.UserName,$DesiredValuesClean.$key.UserName)
138
+
$returnValue=$false
139
+
}
140
+
141
+
# Assume the string is our username when the matching desired value is actually a credential
Write-Verbose-Message ('MATCH: PSCredential username match. Current state is {0} and desired state is {1}'-f$CurrentValues.$key,$DesiredValuesClean.$key.UserName)
145
+
continue
146
+
}
147
+
else
148
+
{
149
+
Write-Verbose-Message ('NOTMATCH: PSCredential username mismatch. Current state is {0} and desired state is {1}'-f$CurrentValues.$key,$DesiredValuesClean.$key.UserName)
150
+
$returnValue=$false
151
+
}
152
+
}
153
+
154
+
if (-not$TurnOffTypeChecking)
155
+
{
156
+
if (($desiredType.Name-ne'Unknown'-and$currentType.Name-ne'Unknown') -and
157
+
$desiredType.FullName-ne$currentType.FullName)
158
+
{
159
+
Write-Verbose-Message "NOTMATCH: Type mismatch for property '$key' Current state type is '$($currentType.Name)' and desired type is '$($desiredType.Name)'"
160
+
continue
161
+
}
162
+
}
163
+
164
+
if ($CurrentValues.$key-eq$DesiredValuesClean.$key-and-not$desiredType.IsArray)
165
+
{
166
+
Write-Verbose-Message "MATCH: Value (type $($desiredType.Name)) for property '$key' does match. Current state is '$($CurrentValues.$key)' and desired state is '$($DesiredValuesClean.$key)'"
167
+
continue
168
+
}
169
+
170
+
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)'"
182
+
continue
183
+
}
184
+
185
+
if ($desiredType.IsArray)
186
+
{
187
+
Write-Verbose"Comparing values in property '$key'"
188
+
if (-not$CurrentValues.ContainsKey($key) -or-not$CurrentValues.$key)
189
+
{
190
+
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)'"
197
+
$returnValue=$false
198
+
continue
199
+
}
200
+
else
201
+
{
202
+
$desiredArrayValues=$DesiredValues.$key
203
+
$currentArrayValues=$CurrentValues.$key
204
+
205
+
for ($i=0; $i-lt$desiredArrayValues.Count; $i++)
206
+
{
207
+
if ($null-ne$desiredArrayValues[$i])
208
+
{
209
+
$desiredType=$desiredArrayValues[$i].GetType()
210
+
}
211
+
else
212
+
{
213
+
$desiredType= [psobject]@{ Name='Unknown' }
214
+
}
215
+
216
+
if ($null-ne$currentArrayValues[$i])
217
+
{
218
+
$currentType=$currentArrayValues[$i].GetType()
219
+
}
220
+
else
221
+
{
222
+
$currentType= [psobject]@{ Name='Unknown' }
223
+
}
224
+
225
+
if (-not$TurnOffTypeChecking)
226
+
{
227
+
if (($desiredType.Name-ne'Unknown'-and$currentType.Name-ne'Unknown') -and
228
+
$desiredType.FullName-ne$currentType.FullName)
229
+
{
230
+
Write-Verbose-Message "`tNOTMATCH: Type mismatch for property '$key' Current state type of element [$i] is '$($currentType.Name)' and desired type is '$($desiredType.Name)'"
231
+
$returnValue=$false
232
+
continue
233
+
}
234
+
}
235
+
236
+
if ($desiredArrayValues[$i] -ne$currentArrayValues[$i])
237
+
{
238
+
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])'"
239
+
$returnValue=$false
240
+
continue
241
+
}
242
+
else
243
+
{
244
+
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])'"
245
+
continue
246
+
}
247
+
}
248
+
249
+
}
250
+
}
251
+
else {
252
+
if ($DesiredValuesClean.$key-ne$CurrentValues.$key)
253
+
{
254
+
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)'"
255
+
$returnValue=$false
256
+
}
257
+
258
+
}
259
+
}
260
+
261
+
Write-Verbose"Result is '$returnValue'"
262
+
return$returnValue
263
+
}
264
+
265
+
functionTest-DSCObjectHasProperty
266
+
{
267
+
[CmdletBinding()]
268
+
[OutputType([bool])]
269
+
param
270
+
(
271
+
[Parameter(Mandatory)]
272
+
[object]
273
+
$Object,
274
+
275
+
[Parameter(Mandatory)]
276
+
[string]
277
+
$PropertyName
278
+
)
279
+
280
+
if ($Object.PSObject.Properties.Name-contains$PropertyName)
0 commit comments