Scripts/Import-WSUSUpdateApprovals.ps1
Function Import-WSUSUpdateApprovals { <# .SYNOPSIS Import WSUS update approval infomation from a XML file. .DESCRIPTION Import WSUS update approval infomation from a XML file. .NOTES Name: Import-WSUSUpdateApprovals Author: Rei Ikei .EXAMPLE Import-WSUSUpdateApprovals -XmlPath C:\WSUSUpdateApprovals.xml -All Import-WSUSUpdateApprovals -XmlPath C:\WSUSUpdateApprovals.xml -TargetComputerGroup "All Computers" #> Param ( [parameter(mandatory=$true)][string]$XmlPath, [switch]$All, [string]$TargetComputerGroupName ) Process { if (($All -eq $false) -And ($TargetComputerGroupName -eq "")) { Write-Error "You must use -TargetComputerGroupName or -All option." return } elseif (($All -eq $true) -And ($TargetComputerGroupName -ne "")) { Write-Error "You cannot use -TargetComputerGroupName and -All options at same time." return } Try { $ImportUpdateApprovals = Import-Clixml $XmlPath } Catch { Write-Error "$error[0]" Return } Write-Host "Try to connect WSUS." Try { $WSUS = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer() $ComputerTargetGroups = $WSUS.GetComputerTargetGroups() } Catch { Write-Error "$error[0]" Return } Write-Host "Connected WSUS successfully." $ComputerTargetGroup = $ComputerTargetGroups | Where-Object {$_.Name -eq $TargetComputerGroupName} if (($All -eq $false) -And ($null -eq $ComputerTargetGroup)) { Write-Error "$TargetComputerGroupName is not existed on this WSUS server." Return } Write-Host "Start to import update approval information." foreach ($ImportUpdateApproval in $ImportUpdateApprovals) { if (($All -eq $false) -And ($ImportUpdateApproval.Action -eq "Decline")) { } else { $UpdateRevisionId = New-Object Microsoft.UpdateServices.Administration.UpdateRevisionId $UpdateRevisionId.UpdateId = $ImportUpdateApproval.Id.UpdateId $UpdateRevisionId.RevisionNumber = $ImportUpdateApproval.Id.RevisionNumber $UpdateTitle = $ImportUpdateApproval.Title Try { $Update = $WSUS.GetUpdate($UpdateRevisionId) } Catch { $UpdateId = $UpdateRevisionId.UpdateId $RevisionNumber = $UpdateRevisionId.RevisionNumber Write-Warning "$UpdateTitle : $UpdateId : $RevisionNumber is not existed on this WSUS Server." $Update = $null } if ($null -ne $Update) { if ($ImportUpdateApproval.Action -eq "Decline") { $Update.Decline() Write-Host "$UpdateTitle is Declined." } else { if ($ImportUpdateApproval.Action.Value -eq "Install") { $ApprovalAction = [Microsoft.UpdateServices.Administration.UpdateApprovalAction]::Install } elseif ($ImportUpdateApproval.Action.Value -eq "NotApproved") { $ApprovalAction = [Microsoft.UpdateServices.Administration.UpdateApprovalAction]::NotApproved } elseif ($ImportUpdateApproval.Action.Value -eq "Uninstall") { $ApprovalAction = [Microsoft.UpdateServices.Administration.UpdateApprovalAction]::Uninstall } if ($All -eq $true) { $ComputerTargetGroupName = $ImportUpdateApproval.ComputerTargetGroup $ComputerTargetGroup = $ComputerTargetGroups | Where-Object {$_.Name -eq $ComputerTargetGroupName} if ($null -eq $ComputerTargetGroup) { Write-Error "$ComputerTargetGroupName is not existed on this WSUS server." } } else { $ComputerTargetGroupName = $TargetComputerGroupName } if ($null -eq $ComputerTargetGroup) { } else { # Deadline is not need to set if it is deafault values ([DateTime]3155378975999999999). if ($ImportUpdateApproval.Deadline -eq ([DateTime]3155378975999999999)) { $Update.Approve($ApprovalAction, $ComputerTargetGroup) | Out-Null Write-Host "$UpdateTitle is $ApprovalAction to $ComputerTargetGroupName." } else { $Deadline = $ImportUpdateApproval.Deadline $Update.Approve($ApprovalAction, $ComputerTargetGroup, $Deadline) | Out-Null Write-Host "$UpdateTitle is $ApprovalAction to $ComputerTargetGroupName and set deadline as $Deadline." } } } } } } Write-Host "Imported update approval information." } } |