Skip to content

Commit 1eca3fb

Browse files
committed
Remedied first code review issues
Corrected the first couple of styling issues
1 parent cbe281e commit 1eca3fb

4 files changed

Lines changed: 566 additions & 163 deletions

File tree

DSCResources/CommonResourceHelper.psm1

Lines changed: 80 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,21 @@ function Get-LocalizedData
3838
return $localizedData
3939
}
4040

41+
<#
42+
.SYNOPSIS
43+
Removes common parameters from a hashtable
44+
.DESCRIPTION
45+
This function serves the purpose of removing common parameters and option common parameters from a parameter hashtable
46+
.PARAMETER Hashtable
47+
The parameter hashtable that should be pruned
48+
#>
4149
function Remove-CommonParameter
4250
{
4351
[OutputType([hashtable])]
4452
[cmdletbinding()]
4553
param
4654
(
47-
[Parameter(Mandatory)]
55+
[Parameter(Mandatory = $true)]
4856
[hashtable]
4957
$Hashtable
5058
)
@@ -57,26 +65,41 @@ function Remove-CommonParameter
5765
$inputClone.Remove($_)
5866
}
5967

60-
$inputClone
68+
return $inputClone
6169
}
6270

71+
<#
72+
.SYNOPSIS
73+
Tests the status of DSC resource parameters
74+
.DESCRIPTION
75+
This function tests the parameter status of DSC resource parameters against the current values present on the system
76+
.PARAMETER CurrentValues
77+
A hashtable with the current values on the system, obtained by e.g. Get-TargetResource
78+
.PARAMETER DesiredValues
79+
The hashtable of desired values
80+
.PARAMETER ValuesToCheck
81+
The values to check if not all values should be checked
82+
.PARAMETER TurnOffTypeChecking
83+
Indicates that the type of the parameter should not be checked
84+
#>
6385
function Test-DscParameterState
6486
{
6587
[CmdletBinding()]
6688
param
6789
(
68-
[Parameter(Mandatory)]
90+
[Parameter(Mandatory = $true)]
6991
[hashtable]
7092
$CurrentValues,
7193

72-
[Parameter(Mandatory)]
94+
[Parameter(Mandatory = $true)]
7395
[object]
7496
$DesiredValues,
7597

7698
[string[]]
7799
$ValuesToCheck,
78100

79-
[switch]$TurnOffTypeChecking
101+
[switch]
102+
$TurnOffTypeChecking
80103
)
81104

82105
$returnValue = $true
@@ -85,19 +108,19 @@ function Test-DscParameterState
85108

86109
if ($DesiredValues.GetType().FullName -notin $types)
87110
{
88-
throw ("Property 'DesiredValues' in Test-DscParameterState must be either a Hashtable or CimInstance. Type detected was $($DesiredValues.GetType().Name)")
111+
throw ("Property 'DesiredValues' in Test-DscParameterState must be either a Hashtable or CimInstance. Type detected was $($DesiredValues.GetType().FullName)")
89112
}
90113

91-
if ($DesiredValues.GetType().FullName -eq 'Microsoft.Management.Infrastructure.CimInstance' -and -not $ValuesToCheck)
114+
if ($DesiredValues -is [Microsoft.Management.Infrastructure.CimInstance] -and -not $ValuesToCheck)
92115
{
93116
throw ("If 'DesiredValues' is a CimInstance then property 'ValuesToCheck' must contain a value")
94117
}
95118

96-
$DesiredValuesClean = Remove-CommonParameter -Hashtable $DesiredValues
119+
$desiredValuesClean = Remove-CommonParameter -Hashtable $DesiredValues
97120

98121
if (-not $ValuesToCheck)
99122
{
100-
$keyList = $DesiredValuesClean.Keys
123+
$keyList = $desiredValuesClean.Keys
101124
}
102125
else
103126
{
@@ -106,13 +129,15 @@ function Test-DscParameterState
106129

107130
foreach ($key in $keyList)
108131
{
109-
if ($null -ne $DesiredValuesClean.$key)
132+
if ($null -ne $desiredValuesClean.$key)
110133
{
111-
$desiredType = $DesiredValuesClean.$key.GetType()
134+
$desiredType = $desiredValuesClean.$key.GetType()
112135
}
113136
else
114137
{
115-
$desiredType = [psobject]@{ Name = 'Unknown' }
138+
$desiredType = [psobject]@{
139+
Name = 'Unknown'
140+
}
116141
}
117142

118143
if ($null -ne $CurrentValues.$key)
@@ -121,64 +146,66 @@ function Test-DscParameterState
121146
}
122147
else
123148
{
124-
$currentType = [psobject]@{ Name = 'Unknown' }
149+
$currentType = [psobject]@{
150+
Name = 'Unknown'
151+
}
125152
}
126153

127154
if ($currentType.Name -ne 'Unknown' -and $desiredType.Name -eq 'PSCredential')
128155
{
129156
# This is a credential object. Compare only the user name
130-
if ($currentType.Name -eq 'PSCredential' -and $CurrentValues.$key.UserName -eq $DesiredValuesClean.$key.UserName)
157+
if ($currentType.Name -eq 'PSCredential' -and $CurrentValues.$key.UserName -eq $desiredValuesClean.$key.UserName)
131158
{
132-
Write-Verbose -Message ('MATCH: PSCredential username match. Current state is {0} and desired state is {1}' -f $CurrentValues.$key.UserName, $DesiredValuesClean.$key.UserName)
159+
Write-Verbose -Message ('MATCH: PSCredential username match. Current state is {0} and desired state is {1}' -f $CurrentValues.$key.UserName, $desiredValuesClean.$key.UserName)
133160
continue
134161
}
135162
else
136163
{
137-
Write-Verbose -Message ('NOTMATCH: PSCredential username mismatch. Current state is {0} and desired state is {1}' -f $CurrentValues.$key.UserName, $DesiredValuesClean.$key.UserName)
164+
Write-Verbose -Message ('NOTMATCH: PSCredential username mismatch. Current state is {0} and desired state is {1}' -f $CurrentValues.$key.UserName, $desiredValuesClean.$key.UserName)
138165
$returnValue = $false
139166
}
140167

141168
# Assume the string is our username when the matching desired value is actually a credential
142-
if($currentType.Name -eq 'string' -and $CurrentValues.$key -eq $DesiredValuesClean.$key.UserName)
169+
if ($currentType.Name -eq 'string' -and $CurrentValues.$key -eq $desiredValuesClean.$key.UserName)
143170
{
144-
Write-Verbose -Message ('MATCH: PSCredential username match. Current state is {0} and desired state is {1}' -f $CurrentValues.$key, $DesiredValuesClean.$key.UserName)
171+
Write-Verbose -Message ('MATCH: PSCredential username match. Current state is {0} and desired state is {1}' -f $CurrentValues.$key, $desiredValuesClean.$key.UserName)
145172
continue
146173
}
147174
else
148175
{
149-
Write-Verbose -Message ('NOTMATCH: PSCredential username mismatch. Current state is {0} and desired state is {1}' -f $CurrentValues.$key, $DesiredValuesClean.$key.UserName)
176+
Write-Verbose -Message ('NOTMATCH: PSCredential username mismatch. Current state is {0} and desired state is {1}' -f $CurrentValues.$key, $desiredValuesClean.$key.UserName)
150177
$returnValue = $false
151178
}
152179
}
153180

154181
if (-not $TurnOffTypeChecking)
155182
{
156-
if (($desiredType.Name -ne 'Unknown' -and $currentType.Name -ne 'Unknown') -and
157-
$desiredType.FullName -ne $currentType.FullName)
183+
if (($desiredType.Name -ne 'Unknown' -and $currentType.Name -ne 'Unknown') -and
184+
$desiredType.FullName -ne $currentType.FullName)
158185
{
159186
Write-Verbose -Message "NOTMATCH: Type mismatch for property '$key' Current state type is '$($currentType.Name)' and desired type is '$($desiredType.Name)'"
160187
continue
161188
}
162189
}
163190

164-
if ($CurrentValues.$key -eq $DesiredValuesClean.$key -and -not $desiredType.IsArray)
191+
if ($CurrentValues.$key -eq $desiredValuesClean.$key -and -not $desiredType.IsArray)
165192
{
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)'"
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)'"
167194
continue
168195
}
169196

170-
if ($DesiredValuesClean.GetType().Name -in 'HashTable', 'PSBoundParametersDictionary')
197+
if ($desiredValuesClean.GetType().Name -in 'HashTable', 'PSBoundParametersDictionary')
171198
{
172-
$checkDesiredValue = $DesiredValuesClean.ContainsKey($key)
199+
$checkDesiredValue = $desiredValuesClean.ContainsKey($key)
173200
}
174201
else
175202
{
176-
$checkDesiredValue = Test-DSCObjectHasProperty -Object $DesiredValuesClean -PropertyName $key
203+
$checkDesiredValue = Test-DSCObjectHasProperty -Object $desiredValuesClean -PropertyName $key
177204
}
178205

179206
if (-not $checkDesiredValue)
180207
{
181-
Write-Verbose -Message "MATCH: Value (type $($desiredType.Name)) for property '$key' does match. Current state is '$($CurrentValues.$key)' and desired state is '$($DesiredValuesClean.$key)'"
208+
Write-Verbose -Message "MATCH: Value (type $($desiredType.Name)) for property '$key' does match. Current state is '$($CurrentValues.$key)' and desired state is '$($desiredValuesClean.$key)'"
182209
continue
183210
}
184211

@@ -187,13 +214,13 @@ function Test-DscParameterState
187214
Write-Verbose "Comparing values in property '$key'"
188215
if (-not $CurrentValues.ContainsKey($key) -or -not $CurrentValues.$key)
189216
{
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)'"
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)'"
191218
$returnValue = $false
192219
continue
193220
}
194221
elseif ($CurrentValues.$key.Count -ne $DesiredValues.$key.Count)
195222
{
196-
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)'"
223+
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)'"
197224
$returnValue = $false
198225
continue
199226
}
@@ -210,7 +237,9 @@ function Test-DscParameterState
210237
}
211238
else
212239
{
213-
$desiredType = [psobject]@{ Name = 'Unknown' }
240+
$desiredType = [psobject]@{
241+
Name = 'Unknown'
242+
}
214243
}
215244

216245
if ($null -ne $currentArrayValues[$i])
@@ -219,13 +248,15 @@ function Test-DscParameterState
219248
}
220249
else
221250
{
222-
$currentType = [psobject]@{ Name = 'Unknown' }
251+
$currentType = [psobject]@{
252+
Name = 'Unknown'
253+
}
223254
}
224255

225256
if (-not $TurnOffTypeChecking)
226257
{
227-
if (($desiredType.Name -ne 'Unknown' -and $currentType.Name -ne 'Unknown') -and
228-
$desiredType.FullName -ne $currentType.FullName)
258+
if (($desiredType.Name -ne 'Unknown' -and $currentType.Name -ne 'Unknown') -and
259+
$desiredType.FullName -ne $currentType.FullName)
229260
{
230261
Write-Verbose -Message "`tNOTMATCH: Type mismatch for property '$key' Current state type of element [$i] is '$($currentType.Name)' and desired type is '$($desiredType.Name)'"
231262
$returnValue = $false
@@ -248,10 +279,11 @@ function Test-DscParameterState
248279

249280
}
250281
}
251-
else {
252-
if ($DesiredValuesClean.$key -ne $CurrentValues.$key)
282+
else
283+
{
284+
if ($desiredValuesClean.$key -ne $CurrentValues.$key)
253285
{
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)'"
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)'"
255287
$returnValue = $false
256288
}
257289

@@ -262,24 +294,32 @@ function Test-DscParameterState
262294
return $returnValue
263295
}
264296

297+
<#
298+
.SYNOPSIS
299+
Tests of an object has a property
300+
.PARAMETER Object
301+
The object to test
302+
.PARAMETER PropertyName
303+
The property name
304+
#>
265305
function Test-DSCObjectHasProperty
266306
{
267307
[CmdletBinding()]
268308
[OutputType([bool])]
269309
param
270310
(
271-
[Parameter(Mandatory)]
311+
[Parameter(Mandatory = $true)]
272312
[object]
273313
$Object,
274314

275-
[Parameter(Mandatory)]
315+
[Parameter(Mandatory = $true)]
276316
[string]
277317
$PropertyName
278318
)
279319

280320
if ($Object.PSObject.Properties.Name -contains $PropertyName)
281321
{
282-
return [bool]$Object.$PropertyName
322+
return [bool] $Object.$PropertyName
283323
}
284324

285325
return $false
@@ -290,4 +330,4 @@ Export-ModuleMember -Function @(
290330
'Remove-CommonParameter'
291331
'Test-DscParameterState'
292332
'Test-DSCObjectHasProperty'
293-
)
333+
)

0 commit comments

Comments
 (0)