Guest User

Untitled

a guest
Dec 18th, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.58 KB | None | 0 0
  1. Configuration UpdateAndScheduleReboot{
  2.  
  3. Param(
  4. [string]$NodeName='localhost',
  5. [datetime]$TargetRebootTime
  6. )
  7.  
  8. Import-DscResource –ModuleName ’PSDesiredStateConfiguration’
  9. Import-DSCResource -ModuleName xPendingReboot
  10. Import-DSCResource -ModuleName xWindowsUpdate
  11. $TargetRebootTime = $AllNodes.TargetRebootTime
  12. Script RebootEnableJob {
  13. GetScript = {
  14. return @{Result = "HelloWorld"}
  15. }
  16. TestScript = {
  17. $ScheduledEnableJob = Get-ScheduledJob | ?{$_.Name -eq 'EnableReboot'}
  18. if ($ScheduledEnableJob){
  19. if ($true <#Check for time match#>){
  20. Write-Verbose "Matching job found"
  21. return $true
  22. } else {
  23. Write-Verbose "Matching job found - Stale Trigger Time"
  24. return $false
  25. }
  26.  
  27. } else {
  28. Write-Verbose "No matching job found"
  29. Return $false
  30. }
  31. }
  32. SetScript = {
  33. $ScheduledEnableJob = Get-ScheduledJob | ?{$_.Name -eq 'EnableReboot'}
  34. if ($ScheduledEnableJob){
  35. Write-Verbose "Modifying Existing Job"
  36. $ScheduledEnableJob | Set-ScheduledJob -Trigger (New-JobTrigger -Once -At $Using:TargetRebootTime)
  37. } else {
  38. Write-Verbose "Creating New Scheduled Job with target trigger time $($Using:TargetRebootTime)"
  39. Write-Verbose "User: $([System.Security.Principal.WindowsIdentity]::GetCurrent().Name)"
  40. Write-Verbose "Current User: $env:UserName"
  41. $EnableJob = @{
  42. Name = 'EnableReboot'
  43. ScriptBlock = {
  44. configuration RebootSetting
  45. {
  46. Param(
  47. [string[]]$NodeName = 'localhost'
  48. )
  49. LocalConfigurationManager {
  50. RebootNodeIfNeeded = $true
  51. }
  52. }
  53. $ConfigPath = "C:\temp\RebootSetting"
  54. & ([scriptblock]::Create("RebootSetting -OutputPath $ConfigPath"))
  55. Set-DscLocalConfigurationManager -Path $ConfigPath
  56.  
  57. }
  58. Trigger = New-JobTrigger -Once -At $Using:TargetRebootTime
  59. ScheduledJobOption = New-ScheduledJobOption -RunElevated -DoNotAllowDemandStart
  60. ErrorAction = 'Stop'
  61. }
  62. Register-ScheduledJob @EnableJob
  63. }
  64. }
  65. }
  66.  
  67. Script RebootDisableJob {
  68. GetScript = {
  69. return @{Result = "HelloWorld"}
  70. }
  71. TestScript = {
  72. $ScheduledDisableJob = Get-ScheduledJob | ?{$_.Name -eq 'DisableReboot'}
  73. if ($ScheduledDisableJob){
  74. if ($true <#Check for time match#>){
  75. Write-Verbose "Matching job found"
  76. return $true
  77. } else {
  78. Write-Verbose "Matching job found - Stale Trigger Time"
  79. return $false
  80. }
  81.  
  82. } else {
  83. Write-Verbose "No matching job found"
  84. Return $false
  85. }
  86. }
  87. SetScript = {
  88. $ScheduledDisableJob = Get-ScheduledJob | ?{$_.Name -eq 'DisableReboot'}
  89. if ($ScheduledDisableJob){
  90. Write-Verbose "Modifying Existing Job"
  91. $ScheduledDisableJob | Set-ScheduledJob -Trigger (New-JobTrigger -Once -At ($Using:TargetRebootTime).AddHours(1.5))
  92. } else {
  93. Write-Verbose "Creating New Scheduled Job with target trigger time $Using:TargetRebootTime"
  94. $DisableJob = @{
  95. Name = 'DisableReboot'
  96. ScriptBlock = {
  97. configuration RebootSetting
  98. {
  99. Param(
  100. [string[]]$NodeName = 'localhost'
  101. )
  102. LocalConfigurationManager {
  103. RebootNodeIfNeeded = $False
  104. }
  105. }
  106. $ConfigPath = "C:\temp\RebootSetting"
  107. "RebootSetting -OutputPath $ConfigPath"
  108. Set-DscLocalConfigurationManager -Path $ConfigPath
  109.  
  110. }
  111. Trigger = New-JobTrigger -Once -At $Using:TargetRebootTime
  112. ScheduledJobOption = New-ScheduledJobOption -RunElevated -DoNotAllowDemandStart
  113. }
  114. Register-ScheduledJob @DisableJob
  115. }
  116. }
  117. }
  118.  
  119. xWindowsUpdateAgent MuSecurityImportant {
  120. IsSingleInstance = 'Yes'
  121. UpdateNow = $True
  122. Source = 'WindowsUpdate'
  123. Notifications = 'ScheduledInstallation'
  124. }
  125.  
  126. xPendingReboot CheckReboot {
  127. Name = "Check for a pending reboot and trigger if true"
  128. }
  129.  
  130. }
  131.  
  132. $ConfigData = @{
  133. AllNodes = @(
  134. @{
  135. NodeName = 'localhost'
  136. TargetRebootTime = (Get-Date 0:0:0.0).AddDays(3)
  137. PSDscAllowDomainUser = $true
  138. PsDscRunAsCredential = $localadmin
  139. }
  140. )
  141. }
  142.  
  143. UpdateAndScheduleReboot -ConfigurationData $ConfigData -OutputPath (Join-Path -Path @($env:SystemDrive) -ChildPath ('Temp\UpdateAndScheduleReboot'))
  144. Start-DscConfiguration -Path C:\temp\UpdateAndScheduleReboot -Force -Wait -Verbose
  145.  
  146. #install-module -Name @('xComputerManagement','xPendingReboot','xWindowsUpdate') -Force
Add Comment
Please, Sign In to add comment