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.
Es öffnet sich ein PowerShell Fenster. Die PowerShell ist automatisch mit der entsprechenden SCCM Site Verbunden.
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.Length–5) + ‚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.Length–5) + ‚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“}