Posted in : Microsoft, System Center By Vikingur Saemundsson

5 years ago

När servicefönster skall skapas i Configuration Manager är det ofta en hel del klickande och det kan leda till mänskliga fel.
För att minimera risken för fel och effektivisera skapandet av servicefönster mot patch kollektioner skapade jag skriptet nedan.
Skriptet loopar igenom alla kollektioner som matchar $Collection parametern och sätter servicefönster enligt schema som specificeras.
Skriptet nedan är gjort för att köras från en Managementpoint men kan ändras genom att hårdkoda $ModulePath variabeln till ConfigurationManager modulen.

[cmdletbinding()]
Param(
    $Site = 'P01',
    $Collection = "SU*",
    $Start = '22:00',
    $Duration = '6',
    [ValidateSet('Days','Hours','Minutes')]
    $Format = 'Hours',
    [ValidateSet('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday')]
    $DayOfWeek = 'Wednesday',
    [Switch]$Enabled = $false
)
Begin{
    $ConfigMgrWMI = Get-WmiObject -query 'select InstallSource from win32_product Where Name = "ConfigMgr Management Point"'
    $count = $ConfigMgrWMI.InstallSource.Split('\').Count
    $ModulePath = "$($ConfigMgrWMI.InstallSource.Split('\')[0..($count-4)] -join '\')\AdminConsole\bin\ConfigurationManager.psd1"
    Import-module $ModulePath
    Set-Location "$($site):"
}
Process{
    Try{
        $UpdateCollections = Get-CMDeviceCollection -Name $Collection
        $Schedule = New-CMSchedule -DurationInterval $Format -DurationCount $Duration -DayOfWeek $DayOfWeek -Start $Start
        $MWName = "Software Updates - $DayOfWeek $($Start.Split(':')[0])-$((([datetime]"$($Start):00")."add$Format"($Duration)).ToShortTimeString().Split(':')[0])"
        $UpdateCollections | Foreach-Object{
            Try{
                $MWWindow = New-CMMaintenanceWindow -CollectionId $_.CollectionID -Schedule $Schedule -Name $MWName -ApplyToSoftwareUpdateOnly -ErrorAction Stop
                $MWWindow.IsEnabled = $Enabled
                $MWWindow | Set-CMMaintenanceWindow -CollectionId $_.CollectionID
            }
            Catch{
                Write-Error $_
            }
        }
    }
    Catch{
        Write-Debug $_
        Write-Error $_
    }
}

 

Tags : Microsoft, SCCM 2012 r2

Add comment

Your comment will be revised by the site if needed.