SCCM 2012 R2 – ConfigMgr Site Maintenance Task PowerShell Module

Ortamınızda kullanmakta olduğunuz System Center Configuration Manager 2012 SP1’ ı R2 sürümüne yükseltme işlemini gerçekleştirmek gibi bir aksiyon almak istediğiniz sağlıklı bir yükseltme yapmak için bulunan bütün Site Maintenance Task’ ları Disable duruma getirmeniz gerekmektedir.

Bunun için mevcut olan bütün maintenance taskları belirlemek ve sırası ile disable etmek baya uzun ve meşakatli bir işdir. Bunu manuel olarak yapmaya başladığınızda bir zaman sonra gerçekten bu işlemin bir zaman kaybı olduğunu düşüneceksiniz ve bunu “otomatik yapabilir miyim ?” düşüncesi aklınaza gelecektir.

Evet otomatik yapabilirsiniz bunun için PowerShell bilginiz olması ve Configuration Manager’ a hakim olmanız gerekiyor. Ama bunun için ben size PowerShell script’ ini paylaşıyorum.

Burada yükseltme işlemi için etkinleştirilen tüm görevleri dışa aktarabilir, etkin görevleri disable edebilebileceksiniz.

## Etkinlestirilen tum gorevleri disa aktar

Get-CmSiteMaintenceTask -Status Enabled | Export-Csv -Path ‘EnabledConfigMgrSiteMaintTasks.csv’ -Append -NoTypeInformation

## Etkinlestirilmis butun gorevleri Disable Et

Import-Csv ‘.\EnabledConfigMgrSiteMaintTasks.csv’ | Get-CmSiteMaintenaceTask | Disable-CmSiteMaintenanceTask

## R2 yukseltmesi burada

## Yukseltmeden once disable edilmis gorevleri etkinlestirmek

Import-Csv ‘.\EnabledConfigMgrSiteMaintTasks.csv’ | Get-CmSiteMaintenaceTask | Enable-CmSiteMaintenanceTask

Bu işlemleri yapabilmeniz 3 foksiyon bulunmaktadır. Bunları bir .psm1 içerisine içerisine modül olarak eklemek istiyorum fakat siz istediğiniz gibi yapabilirsiniz.

function Get-CmSiteMaintenanceTask {

<#

.SYNOPSIS

This function discovers and records the state of all site maintenance tasks on a ConfigMgr site server.

.PARAMETER TaskName

The name of the site maintenance task you’d like to limit the result set by.  This accepts wildcards or

multiple names

.PARAMETER Status

The status (either enabled or disabled) of the site maintenance tasks you’d like to limit the result set by.

.PARAMETER SiteServer

The SCCM site server to query

.PARAMETER SiteCode

The SCCM site code

.EXAMPLE

 

PS> Get-CmSiteMaintenanceTask -TaskName ‘Disabled*’ -Status Enabled

 

This example finds all site maintenance tasks starting with ‘Disabled’ that are enabled.

#>

[CmdletBinding()]

[OutputType([System.Management.ManagementObject])]

param (

[Parameter(ValueFromPipeline,ValueFromPipelineByPropertyName)]

[string[]]$TaskName,

[Alias(‘ItemName’)]

[ValidateSet(‘Enabled’, ‘Disabled’)]

[string]$Status,

[string]$SiteServer = ‘CONFIGMANAGER’,

[ValidateLength(3, 3)]

[string]$SiteCode = ‘UHP’

)

 

process {

try {

$WmiParams = @{ ‘Computername’ = $SiteServer; ‘Namespace’ = “root\sms\site_$SiteCode”}

 

Write-Verbose -Message “Building the WMI query…”

if ($TaskName -or $Status) {

if ($TaskName) {

$WmiParams.Query = ‘SELECT * FROM SMS_SCI_SQLTask WHERE ‘

$NameConditions = @()

foreach ($n in $TaskName) {

## Allow asterisks in cmdlet but WQL requires percentage and double backslashes

$NameValue = $n.Replace(‘*’, ‘%’).Replace(‘\’, ‘\\’)

$Operator = @{ $true = ‘LIKE’; $false = ‘=’ }[$NameValue -match ‘\%’]

$NameConditions += “(ItemName $Operator ‘$NameValue’)”

}

$WmiParams.Query += ($NameConditions -join ‘ OR ‘)

}

if ($Status) {

$WmiParams.Class = ‘SMS_SCI_SQLTask’

$Enabled = $Status -eq ‘Enabled’

$WhereBlock = { $_.Enabled -eq $Enabled }

}

else {

$WmiParams.Class = ‘SMS_SCI_SQLTask’

}

if ($WhereBlock) {

Get-WmiObject @WmiParams | where $WhereBlock

else {

Get-WmiObject @WmiParams

}

catch {

Write-Error $_.Exception.Message

}

}

}

 

function Enable-CmSiteMaintenanceTask {

<#

.SYNOPSIS

This function enables a ConfigMgr site maintenance task.

.PARAMETER InputObject

An object of returned from Get-CmSiteMaintenceTask of the task you’d like enabled.

.EXAMPLE

 

PS> Get-CmSiteMaintenanceTask -TaskName ‘Disabled*’ -Status Disabled | Enable-CmsiteMaintenanceTask

 

This example finds all site maintenance tasks starting with ‘Disabled’ that are disabled and enables them all.

#>

[CmdletBinding()]

param (

[Parameter(ValueFromPipeline)]

[System.Management.ManagementObject]$InputObject

)

process {

try {

$InputObject | Set-WmiInstance -Arguments @{ ‘Enabled’ = $true } | Out-Null

catch {

Write-Error $_.Exception.Message

}

}

}

 

function Disable-CmSiteMaintenanceTask {

<#

.SYNOPSIS

This function disables a ConfigMgr site maintenance task.

.PARAMETER InputObject

An object of returned from Get-CmSiteMaintenceTask of the task you’d like disabled.

.EXAMPLE

 

PS> Get-CmSiteMaintenanceTask -TaskName ‘Disabled*’ -Status Enabled | Disable-CmsiteMaintenanceTask

 

This example finds all site maintenance tasks starting with ‘Disabled’ that are enabled and disables them all.

#>

[CmdletBinding()]

param (

[Parameter(ValueFromPipeline)]

[System.Management.ManagementObject]$InputObject

)

process {

try {

$InputObject | Set-WmiInstance -Arguments @{ ‘Enabled’ = $false } | Out-Null

catch {

Write-Error $_.Exception.Message

}

}

}