Scripts/New-PoshWSUSInstallApprovalRule.ps1

Function New-PoshWSUSInstallApprovalRule {
    <#
    .SYNOPSIS
        Creates a new Install Approval Rule in WSUS.
         
    .DESCRIPTION
        Creates a new Install Approval Rule in WSUS.
         
    .PARAMETER Name
        Name of the new Install Approval Rule
         
    .PARAMETER Enable
        Enables the approval rule after created
         
    .PARAMETER Categories
        Collection of categories that will be applied to the rule. Use Get-PoshWSUSUpdateCategories to gather the collection.
         
    .PARAMETER Group
        Collection of Computer Target Groups that will be applied to the rule. Use Get-PoshWSUSGroups to gather the collection.
         
    .PARAMETER Classifications
        Collection of Update Classifications that will be applied to the rule. Use Get-PoshWSUSUpdateClassifications for the collection.
         
    .PARAMETER PassThru
          
    .NOTES
        Name: New-PoshWSUSInstallApprovalRule
        Author: Boe Prox
        DateCreated: 08DEC2010
                
    .LINK
        https://learn-powershell.net
         
    .EXAMPLE
    New-PoshWSUSInstallApprovalRule -Name 'NewApproval'
 
    Description
    -----------
    Creates a new rule with nothing configured named 'NewApproval'
 
    .EXAMPLE
    $cat = Get-PoshWSUSUpdateCategory | ? {$_.Title -eq "Windows Server 2008"}
    $group = Get-PoshWSUSGroup | ? {$_.Name -eq "Test"}
    $class = Get-PoshWSUSUpdateClassification | ? {$_.Title -eq "Updates"}
    New-PoshWSUSInstallApprovalRule -Name "Rule1" -Category $cat -Classification $class -Group $group -Enable
 
    Description
    -----------
    Creates a new rule named 'NewApproval' with groups, categories and classifications configured and enables the rule.
    #>
 
    [cmdletbinding(
        DefaultParameterSetName = 'Name',
        ConfirmImpact = 'low',
        SupportsShouldProcess = $True    
    )]
    Param(
        [Parameter(
            Mandatory = $True,
            Position = 0,
            ParameterSetName = '',
            ValueFromPipeline = $True)]
            [string]$Name,  
        [Parameter(
            Mandatory = $False,
            Position = 2,
            ParameterSetName = '',
            ValueFromPipeline = $False)]
            [switch]$Enable, 
        [Parameter(
            Mandatory = $False,
            Position = 3,
            ParameterSetName = 'Properties',
            ValueFromPipeline = $False)]
            [System.Object]$Category,  
        [Parameter(
            Mandatory = $False,
            Position = 4,
            ParameterSetName = 'Properties',
            ValueFromPipeline = $False)]
            [System.Object]$Group, 
        [Parameter(
            Mandatory = $False,
            Position = 5,
            ParameterSetName = 'Properties',
            ValueFromPipeline = $False)]
            [System.Object]$Classification,
        [Parameter(
            Mandatory = $False,
            Position = 6,
            ParameterSetName = '',
            ValueFromPipeline = $False)]
            [Switch]$PassThru                                                                                                                                 
    )
    Begin {
        #Define the required action for the rule
        Write-Verbose "Setting the Action to 'Install'"
        $install = [Microsoft.UpdateServices.Administration.AutomaticUpdateApprovalAction]::Install       
    }
    Process {
        If ($pscmdlet.ShouldProcess($Name)) {
            #Create the Rule
            Write-Verbose "Creating Approval Rule"
            $rule = $wsus.CreateInstallApprovalRule($Name)
        }
        #Begin setting the properties of the Rule
        If ($psboundparameters["Category"]) {
            #Create the update collections object
            Write-Verbose "Creating collection of categories"
            $cat_coll = New-Object Microsoft.UpdateServices.Administration.UpdateCategoryCollection
            #Add categories to collection
            Write-Verbose "Adding categories to collection"
            $cat_coll.AddRange($Category)
            #Set the categories for rule
            If ($pscmdlet.ShouldProcess($Name)) {        
                Write-Verbose "Setting categories on rule"
                $rule.SetCategories($cat_coll)
            }
        }
        If ($psboundparameters["Group"]) {
            #Create the update collections object
            Write-Verbose "Creating collection of groups"
            $group_coll = New-Object Microsoft.UpdateServices.Administration.ComputerTargetGroupCollection
            #Add groups to collection
            Write-Verbose "Adding groups to collection"
            $group_coll.AddRange($group)
            If ($pscmdlet.ShouldProcess($Name)) {        
                #Set the groups for rule
                Write-Verbose "Setting groups on rule"
                $rule.SetComputerTargetGroups($group_coll)
            }
        }
        If ($psboundparameters["Classification"]) {
            #Create the update collections object
            Write-Verbose "Creating collection of classifications"
            $class_coll = New-Object Microsoft.UpdateServices.Administration.UpdateClassificationCollection
            #Add classifications to collection
            Write-Verbose "Adding classifications to collection"
            $class_coll.AddRange($classification)
            If ($pscmdlet.ShouldProcess($Name)) {        
                #Set the classification for rule
                Write-Verbose "Setting Classification on rule"
                $rule.SetUpdateClassifications($class_coll)
            }
        } 
        If ($Enable) {
            If ($pscmdlet.ShouldProcess($Name)) {        
                #Enable the rule for use
                Write-Verbose "Enabling Rule"
                $rule.Enabled = $True
            }
        }
    }        
    End{ 
        If ($pscmdlet.ShouldProcess($Name)) {        
            #Save the Rule
            Write-Verbose "Saving new rule"
            $rule.Save()
            Write-Output "Rule $($name) has been created."
        }
                    
        If ($PassThru) {
            Write-Output $rule
        }  
    }                                                               
}