0

PowerShell Automatisierung im System Center Configuration Manager 2012 R2

Der Configuration Manger 2012 R2 bringt eine Reihe an PowerShell CMDlet’s mit die dem Administrator die Arbeit erheblich erleichtern können. Dieses Beitrag soll das anhand einer einfachen Automatisierung aufzeigen.

In diesem Beispiel wird der Configuration Manager zur Verwaltung von mobilen Endgeräten eingesetzt. Alle mobilen Endgeräte werden bei der Registrierung als automatisch als „Personal“ gekennzeichnet. Dies ist die SCCM Standardeinstellung. In dem Beispiel sollen die Geräte jedoch als „Company“ gekennzeichnet werden.

Zu diesem Zweck bedienen wir uns der PowerShell. Die PowerShell des Configuration Manager kann über die Configuration Manager UI geöffnet werden.

SCCM_PowerShell

Es öffnet sich ein PowerShell Fenster. Die PowerShell ist automatisch mit der entsprechenden SCCM Site Verbunden.

SCCM_PowerShell_Console

Der Aufruf über die UI ist für das automatisieren jedoch nicht unbedingt Sinnvoll. Wie können also die SCCM PowerShell Module importiert werden? Die PowerShell Module liegen im SCCM Programmverzeichnis:

C:Program Files (x86)Microsoft Configuration ManagerAdminConsolebinConfigurationManager.psd1

Für den Import wird wie gewohnt der Befehl „Import-Module“ verwendet:

Import-Module „C:Program Files (x86)Microsoft Configuration ManagerAdminConsolebinConfigurationManager.psd1“

Durch das importieren der PowerShell Module stehen nun die Zahlreichen SCCM CMDlets zur Verfügung.

https://technet.microsoft.com/en-us/library/jj821831(v=sc.20).aspx

Damit die CMDlets auch ohne den Aufruf der UI verwendet werden können muss zunächst der entsprechende SCCM Datentyp aktiviert werden. Dies geschieht durch den Aufruf des folgenden Befehls:

Update-TypeData -PrependPath ($Env:SMS_ADMIN_UI_PATH.Substring(0,$Env:SMS_ADMIN_UI_PATH.Length5) + ‚Microsoft.ConfigurationManagement.PowerShell.Types.ps1xml‘)

Nun ist das SCCM Drive zu erstellen:

New-PSDrive -Name „SCCM_Site“ -PSProvider CMSite -Root „severname“

Anmerkung:

Findet der Aufruf der SCCM CMDlets ohne die beiden oberen aufrufe statt erscheint folgende Fehlermeldung:

PS D:PSScripts> Get-CMSite

 

Get-CMSite : This command cannot be run from the current drive. To run this command you must first connect to a Configuration Manager drive.

At line:1 char:1

+ Get-CMSite

+ ~~~~~~~~~~

+ CategoryInfo : DeviceError: (Microsoft.Confi….GetSiteCommand:GetSiteCommand) [Get-CMSite], InvalidOperationException

+ FullyQualifiedErrorId : CommandCannotExecuteFromCurrentDrive,Microsoft.ConfigurationManagement.Cmdlets.HS.Commands.GetSiteCommand

Nun kann in das SCCM Drive gewechselt werden (in diesem Fall heißt die SCCM Site 001):

cd 001: 

Ohne den wechsel in die Site wird beim Aufruf der SCCM Cmdlets folgende Meldung erscheinen:

Um dieses einfache Beispiel nun zum ende zu bringen lesen wir die SCCM Ressource ID’s der Geräte einer bestimmten Collection aus.

$ResourceIDs = (Get-CMDevice -CollectionID „00100027“).ResourceId

Anmerkung:

Statt des „-CollectionID“ Parameters kann natürlich auch der Parameter „-CollectionName“ verwendet werden. Dadurch würde das Skript beim umbenennen der Collection jedoch fehlschlagen.

Im letzten Schritt übergeben wir den Inhalt des Arrays an einen „foreach loop“ und setzen den Device Owner bzw. Typ des Geätes auf „Company“.

$ResourceIDs | % {Set-CMDeviceOwnership -DeviceId $_ -OwnershipType „1“}

Aus diesem simplen Beispiel lässt sich ein Skript erzeugen welches über den Windows Task Scheduler eingeplant werden kann.

Import-Module „C:Program Files (x86)Microsoft Configuration ManagerAdminConsolebinConfigurationManager.psd1“

Update-TypeData -PrependPath ($Env:SMS_ADMIN_UI_PATH.Substring(0,$Env:SMS_ADMIN_UI_PATH.Length5) + ‚Microsoft.ConfigurationManagement.PowerShell.Types.ps1xml‘)

New-PSDrive -Name „Sitename“ -PSProvider CMSite -Root „Servername“

cd 001:

$ResourceIDs = (Get-CMDevice -CollectionID „00100027“).ResourceId

$ResourceIDs | % {Set-CMDeviceOwnership -DeviceId $_ -OwnershipType „1“}

beuermann

Schreibe einen Kommentar