functions/Suspend-WindowsUpdate.ps1
Function Suspend-WindowsUpdate { [CmdletBinding(SupportsShouldProcess)] [OutputType('None', 'WindowsUpdateSetting')] [Alias('swu')] Param( [Parameter(HelpMessage = 'Enter a date time to resume updates. This must be less than 35 days.')] [ValidateScript( { if ($_ -gt (Get-Date)) { $True } else { Throw 'You must enter a date in the future.' $false } })] [ValidateScript( { $test = New-TimeSpan -Start (Get-Date) -End $_ if ($test.totalDays -gt 35) { Throw 'You must enter a date less than 35 days from now' $False } else { $True } })] [DateTime]$Resume = (Get-Date).AddDays(35), [Switch]$PassThru ) Write-Verbose "[$((Get-Date).TimeOfDay)] Starting $($MyInvocation.MyCommand)" $epoch = Get-Date 1/1/1600 $utc = (Get-Date).ToUniversalTime() $Start = '{0:u}' -f $utc $end = '{0:u}' -f $resume.ToUniversalTime() $ticks = ($utc - $epoch).Ticks $val = $ticks - $ticks % [TimeSpan]::TicksPerSecond Write-Verbose "[$((Get-Date).TimeOfDay)] Pausing Windows Updates until $end" if ($PSCmdlet.ShouldProcess($env:computername, "Suspend Windows Update until $Resume")) { $base1 = 'HKLM:\SOFTWARE\Microsoft\WindowsUpdate\ux\Settings' Set-ItemProperty -Path $base1 -Name PauseFeatureUpdatesStartTime -Value $start -Type String Set-ItemProperty -Path $base1 -Name PauseQualityUpdatesStartTime -Value $start -Type String Set-ItemProperty -Path $base1 -Name PauseUpdatesExpiryTime -Value $end -Type String Set-ItemProperty -Path $base1 -Name PauseFeatureUpdatesEndTime -Value $end -Type String Set-ItemProperty -Path $base1 -Name PauseQualityUpdatesEndTime -Value $end -Type String $base2 = 'HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UpdatePolicy\Settings' Set-ItemProperty -Path $base2 -Name PausedFeatureStatus -Value 1 -type DWord #dword 1 = on 0 = off Set-ItemProperty -Path $base2 -Name PausedQualityStatus -Value 1 -type DWord #dword 1 = on 0 = off Set-ItemProperty -Path $Base2 -Name PausedFeatureDate -Value $val -Type QWord Set-ItemProperty -Path $Base2 -Name PausedQualityDate -Value $val -Type QWord if ($PassThru) { Get-WindowsUpdateSetting } } Write-Verbose "[$((Get-Date).TimeOfDay)] Ending $($MyInvocation.MyCommand)" } |