Skip to content

Commit 3f4094a

Browse files
committed
Added a couple of Write-Verbose statements
1 parent 280e5c7 commit 3f4094a

1 file changed

Lines changed: 15 additions & 254 deletions

File tree

DSCResources/MSFT_xScheduledTask/MSFT_xScheduledTask.psm1

Lines changed: 15 additions & 254 deletions
Original file line numberDiff line numberDiff line change
@@ -14,252 +14,7 @@ namespace xScheduledTask
1414
}
1515
'@
1616

17-
function Remove-CommonParameter
18-
{
19-
[OutputType([hashtable])]
20-
[cmdletbinding()]
21-
param
22-
(
23-
[Parameter(Mandatory)]
24-
[hashtable]
25-
$Hashtable
26-
)
27-
28-
$inputClone = $Hashtable.Clone()
29-
$commonParameters = [System.Management.Automation.PSCmdlet]::CommonParameters
30-
$commonParameters += [System.Management.Automation.PSCmdlet]::OptionalCommonParameters
31-
32-
$Hashtable.Keys | Where-Object { $_ -in $commonParameters } | ForEach-Object {
33-
$inputClone.Remove($_)
34-
}
35-
36-
$inputClone
37-
}
38-
39-
function Test-DscParameterState
40-
{
41-
[CmdletBinding()]
42-
param
43-
(
44-
[Parameter(Mandatory)]
45-
[hashtable]
46-
$CurrentValues,
47-
48-
[Parameter(Mandatory)]
49-
[object]
50-
$DesiredValues,
51-
52-
[string[]]
53-
$ValuesToCheck,
54-
55-
[switch]$TurnOffTypeChecking
56-
)
57-
58-
$returnValue = $true
59-
60-
$types = 'System.Management.Automation.PSBoundParametersDictionary', 'System.Collections.Hashtable', 'Microsoft.Management.Infrastructure.CimInstance'
61-
62-
if ($DesiredValues.GetType().FullName -notin $types)
63-
{
64-
throw ("Property 'DesiredValues' in Test-DscParameterState must be either a Hashtable or CimInstance. Type detected was $($DesiredValues.GetType().Name)")
65-
}
66-
67-
if ($DesiredValues.GetType().FullName -eq 'Microsoft.Management.Infrastructure.CimInstance' -and -not $ValuesToCheck)
68-
{
69-
throw ("If 'DesiredValues' is a CimInstance then property 'ValuesToCheck' must contain a value")
70-
}
71-
72-
$DesiredValuesClean = Remove-CommonParameter -Hashtable $DesiredValues
73-
74-
if (-not $ValuesToCheck)
75-
{
76-
$keyList = $DesiredValuesClean.Keys
77-
}
78-
else
79-
{
80-
$keyList = $ValuesToCheck
81-
}
82-
83-
foreach ($key in $keyList)
84-
{
85-
if ($null -ne $DesiredValuesClean.$key)
86-
{
87-
$desiredType = $DesiredValuesClean.$key.GetType()
88-
}
89-
else
90-
{
91-
$desiredType = [psobject]@{ Name = 'Unknown' }
92-
}
93-
94-
if ($null -ne $CurrentValues.$key)
95-
{
96-
$currentType = $CurrentValues.$key.GetType()
97-
}
98-
else
99-
{
100-
$currentType = [psobject]@{ Name = 'Unknown' }
101-
}
102-
103-
if ($currentType.Name -ne 'Unknown' -and $desiredType.Name -eq 'PSCredential')
104-
{
105-
# This is a credential object. Compare only the user name
106-
if ($currentType.Name -eq 'PSCredential' -and $CurrentValues.$key.UserName -eq $DesiredValuesClean.$key.UserName)
107-
{
108-
Write-Verbose -Message ('MATCH: PSCredential username match. Current state is {0} and desired state is {1}' -f $CurrentValues.$key.UserName, $DesiredValuesClean.$key.UserName)
109-
continue
110-
}
111-
else
112-
{
113-
Write-Verbose -Message ('NOTMATCH: PSCredential username mismatch. Current state is {0} and desired state is {1}' -f $CurrentValues.$key.UserName, $DesiredValuesClean.$key.UserName)
114-
$returnValue = $false
115-
}
116-
117-
# Assume the string is our username when the matching desired value is actually a credential
118-
if($currentType.Name -eq 'string' -and $CurrentValues.$key -eq $DesiredValuesClean.$key.UserName)
119-
{
120-
Write-Verbose -Message ('MATCH: PSCredential username match. Current state is {0} and desired state is {1}' -f $CurrentValues.$key, $DesiredValuesClean.$key.UserName)
121-
continue
122-
}
123-
else
124-
{
125-
Write-Verbose -Message ('NOTMATCH: PSCredential username mismatch. Current state is {0} and desired state is {1}' -f $CurrentValues.$key, $DesiredValuesClean.$key.UserName)
126-
$returnValue = $false
127-
}
128-
}
129-
130-
if (-not $TurnOffTypeChecking)
131-
{
132-
if (($desiredType.Name -ne 'Unknown' -and $currentType.Name -ne 'Unknown') -and
133-
$desiredType.FullName -ne $currentType.FullName)
134-
{
135-
Write-Verbose -Message "NOTMATCH: Type mismatch for property '$key' Current state type is '$($currentType.Name)' and desired type is '$($desiredType.Name)'"
136-
continue
137-
}
138-
}
139-
140-
if ($CurrentValues.$key -eq $DesiredValuesClean.$key -and -not $desiredType.IsArray)
141-
{
142-
Write-Verbose -Message "MATCH: Value (type $($desiredType.Name)) for property '$key' does match. Current state is '$($CurrentValues.$key)' and desired state is '$($DesiredValuesClean.$key)'"
143-
continue
144-
}
145-
146-
if ($DesiredValuesClean.GetType().Name -in 'HashTable', 'PSBoundParametersDictionary')
147-
{
148-
$checkDesiredValue = $DesiredValuesClean.ContainsKey($key)
149-
}
150-
else
151-
{
152-
$checkDesiredValue = Test-DSCObjectHasProperty -Object $DesiredValuesClean -PropertyName $key
153-
}
154-
155-
if (-not $checkDesiredValue)
156-
{
157-
Write-Verbose -Message "MATCH: Value (type $($desiredType.Name)) for property '$key' does match. Current state is '$($CurrentValues.$key)' and desired state is '$($DesiredValuesClean.$key)'"
158-
continue
159-
}
160-
161-
if ($desiredType.IsArray)
162-
{
163-
Write-Verbose "Comparing values in property '$key'"
164-
if (-not $CurrentValues.ContainsKey($key) -or -not $CurrentValues.$key)
165-
{
166-
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)'"
167-
$returnValue = $false
168-
continue
169-
}
170-
elseif ($CurrentValues.$key.Count -ne $DesiredValues.$key.Count)
171-
{
172-
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)'"
173-
$returnValue = $false
174-
continue
175-
}
176-
else
177-
{
178-
$desiredArrayValues = $DesiredValues.$key
179-
$currentArrayValues = $CurrentValues.$key
180-
181-
for ($i = 0; $i -lt $desiredArrayValues.Count; $i++)
182-
{
183-
if ($null -ne $desiredArrayValues[$i])
184-
{
185-
$desiredType = $desiredArrayValues[$i].GetType()
186-
}
187-
else
188-
{
189-
$desiredType = [psobject]@{ Name = 'Unknown' }
190-
}
191-
192-
if ($null -ne $currentArrayValues[$i])
193-
{
194-
$currentType = $currentArrayValues[$i].GetType()
195-
}
196-
else
197-
{
198-
$currentType = [psobject]@{ Name = 'Unknown' }
199-
}
200-
201-
if (-not $TurnOffTypeChecking)
202-
{
203-
if (($desiredType.Name -ne 'Unknown' -and $currentType.Name -ne 'Unknown') -and
204-
$desiredType.FullName -ne $currentType.FullName)
205-
{
206-
Write-Verbose -Message "`tNOTMATCH: Type mismatch for property '$key' Current state type of element [$i] is '$($currentType.Name)' and desired type is '$($desiredType.Name)'"
207-
$returnValue = $false
208-
continue
209-
}
210-
}
211-
212-
if ($desiredArrayValues[$i] -ne $currentArrayValues[$i])
213-
{
214-
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])'"
215-
$returnValue = $false
216-
continue
217-
}
218-
else
219-
{
220-
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])'"
221-
continue
222-
}
223-
}
224-
225-
}
226-
}
227-
else {
228-
if ($DesiredValuesClean.$key -ne $CurrentValues.$key)
229-
{
230-
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)'"
231-
$returnValue = $false
232-
}
233-
234-
}
235-
}
236-
237-
Write-Verbose "Result is '$returnValue'"
238-
return $returnValue
239-
}
240-
241-
function Test-DSCObjectHasProperty
242-
{
243-
[CmdletBinding()]
244-
[OutputType([bool])]
245-
param
246-
(
247-
[Parameter(Mandatory)]
248-
[object]
249-
$Object,
250-
251-
[Parameter(Mandatory)]
252-
[string]
253-
$PropertyName
254-
)
255-
256-
if ($Object.PSObject.Properties.Name -contains $PropertyName)
257-
{
258-
return [bool]$Object.$PropertyName
259-
}
260-
261-
return $false
262-
}
17+
Import-Module -Name (Join-Path -Path (Split-Path -Path $PSScriptRoot -Parent) -ChildPath 'CommonResourceHelper.psm1')
26318

26419
function Get-TargetResource
26520
{
@@ -391,10 +146,12 @@ function Get-TargetResource
391146
$RunOnlyIfNetworkAvailable = $false
392147
)
393148

149+
Write-Verbose -Message ('Retrieving existing task ({0} in {1})' -f $TaskName, $TaskPath)
394150
$task = Get-ScheduledTask -TaskName $TaskName -TaskPath $TaskPath -ErrorAction SilentlyContinue
395151

396152
if ($null -eq $task)
397153
{
154+
Write-Verbose -Message ('No task found. returning empty task {0} with Ensure = "Absent"' -f $Taskname)
398155
return @{
399156
TaskName = $TaskName
400157
ActionExecutable = $ActionExecutable
@@ -404,6 +161,7 @@ function Get-TargetResource
404161
}
405162
else
406163
{
164+
Write-Verbose -Message ('Task {0} found in {1}. Retrieving settings, first action, first trigger and repetition settings' -f $TaskName, $TaskPath)
407165
$action = $task.Actions | Select-Object -First 1
408166
$trigger = $task.Triggers | Select-Object -First 1
409167
$settings = $task.Settings
@@ -446,8 +204,12 @@ function Get-TargetResource
446204
{
447205
throw "Trigger type $_ not recognized."
448206
}
449-
}
207+
}
208+
209+
Write-Verbose -Message ('Detected schedule type {0} for first trigger' -f $returnScheduleType)
450210

211+
Write-Verbose -Message 'Calculating timespans/datetimes from trigger repetition settings'
212+
451213
$repInterval = $trigger.Repetition.Interval
452214
$Days = $Hours = $Minutes = $Seconds = 0
453215

@@ -796,6 +558,7 @@ function Set-TargetResource
796558
$RunOnlyIfNetworkAvailable = $false
797559
)
798560

561+
Write-Verbose -Message ('Entering Set-TargetResource for {0} in {1}' -f $TaskName,$TaskPath)
799562
$currentValues = Get-TargetResource @PSBoundParameters
800563

801564
if ($Ensure -eq "Present")
@@ -953,19 +716,17 @@ function Set-TargetResource
953716
}
954717

955718
$tempTrigger = New-ScheduledTaskTrigger -Once -At 6:6:6 -RepetitionInterval $RepeatInterval.TimeOfDay -RepetitionDuration $RepetitionDuration.TimeOfDay
956-
957-
Write-Verbose 'Copying values from temporary trigger to property Repetition of $trigger.Repetition'
958-
719+
Write-Verbose -Message 'Copying values from temporary trigger to property Repetition of $trigger.Repetition'
959720
$trigger.Repetition = $tempTrigger.Repetition
960721
}
961722

962723
if ($currentValues.Ensure -eq "Present")
963724
{
964-
Write-Verbose -Message "Removing previous scheduled task `"$TaskName`""
725+
Write-Verbose -Message ('Removing previous scheduled task' -f $TaskName)
965726
Unregister-ScheduledTask -TaskName $TaskName -TaskPath $TaskPath
966727
}
967728

968-
Write-Verbose -Message "Creating new scheduled task `"$TaskName`""
729+
Write-Verbose -Message ('Creating new scheduled task' -f $TaskName)
969730

970731
$scheduledTask = New-ScheduledTask -Action $action -Trigger $trigger -Settings $setting
971732
if (-not [string]::IsNullOrWhiteSpace($Description))
@@ -994,7 +755,7 @@ function Set-TargetResource
994755

995756
if ($Ensure -eq "Absent")
996757
{
997-
Write-Verbose -Message "Removing scheduled task `"$TaskName`""
758+
Write-Verbose -Message ('Removing scheduled task' -f $TaskName)
998759
Unregister-ScheduledTask -TaskName $TaskName -TaskPath $TaskPath -Confirm:$false
999760
}
1000761
}
@@ -1129,7 +890,7 @@ function Test-TargetResource
1129890
$RunOnlyIfNetworkAvailable = $false
1130891
)
1131892

1132-
Write-Verbose -Message "Testing scheduled task $TaskName"
893+
Write-Verbose -Message ('Testing scheduled task' -f $TaskName)
1133894

1134895
$CurrentValues = Get-TargetResource @PSBoundParameters
1135896

0 commit comments

Comments
 (0)