SCCM Deployment PowerShell Skript

​​​​​​​Schedule Anpassung für SCCM-Deployment via PowerShell

23.05.2019 | Peter Korallus

​Die Anforderung einer unserer Kunden an uns, war es, wiederkehrende Softwareverteilungen über Microsoft SCCM zu automatisieren. In der SCCM-Umgebung dieses Kunden befinden sich einige Softwarepakete, bei denen die Verteilung aufgrund von Updates der jeweiligen Applikation häufiger erneut durchgeführt werden muss, weil z.B. eine neue msi-Datei bereitgestellt worden ist. Die Automatisierung dieser wiederkehrenden Verteilungen sollte über ein Powershell-Skript erfolgen, das verschiedene Aufgaben erledigt, u.a.

  • ​Kopieren der neuen msi-Datei in den Quellordner des Softwarepaketes​
  • Aktualisieren von Eigenschaften des Paketes, z.B. der Version
  • Aktualisierung der SCCM-Verteilungspunkte
  • Aktualisierung des Deployments​

Die Aufgabenstellung war dabei, den Schedule (Verteilungszeitpunkt) des betreffenden SCCM-Deployments über die PowerShell anhand der folgenden Parameter zu ändern:

  • ​Beginn der Verteilung am nächsten Tag um 8:00h (Assignment schedule)​
  • Rerun behaviour: „Always rerun program“

Da seitens der Powershell cmdlets aus dem SCCM-Modul verwendet werden, besteht die notwendige Voraussetzung, dass das Modul geladen ist und eine Verbindung zur betreffenden SCCM-Site via Powershell hergestellt worden ist. Die konkrete Version war in diesem Fall SCCM Current Branch (1810) und es wurden Deployments von klassischen Paketen bearbeitet.  

Schedule Anpassung für SCCM Deployment via PowerShell

Vorgehen

Zuerst wurden innerhalb des Powershellskriptes zwei Variablen definiert:

$CMDeploymentID = (Get-CMDeployment -ProgramName „SomeProgramName“ | select -ExpandProperty DeploymentID)​

Hiermit wird die ID des Zieldeployments in die Variable $CMDeploymentID geschrieben. Als Parameter dient der eindeutige Name des Programms. Denkbar ist auch eine Filterung nach Collectionname oder ähnliches…​

$NewCMDeploymentDay = (Get-Date).AddDays(1).ToShortDateString()​

Die Verteilung sollte ja am nächsten Tag beginnen - somit wurde einfach das aktuelle Datum um einen Tag erhöht. Das Ausgabeformat wurde dabei mit ToShortDateString() (z.B: „21.05.2019“) angegeben und der Wert in die Variable $NewCMDeploymentDay geschrieben.​

Die eigentliche Änderung des SCCM-Deployments sollte über das cmdlet Set-CMPackageDeployment erfolgen. Dieses cmdlet erwartet innerhalb des Parameters Schedule ein Objekt des Typs CMSchedule. Ein solches Objekt kann über das cmdlet New-CMSchedule generiert werden. Der Wert für den neuen Deployment-Schedule wurde dann in der dritten Variablen NewCMDeploymentSchedule hinterlegt:​

$NewCMDeploymentSchedule = New-CMSchedule -Start "$NewCMDeploymentDay 08:00 AM" -Nonrecurring​

Der Startzeitpunkt des neues Depoyments war somit am nächsten Tag um 8:00h… 

Zuletzt wurde das Deployment selbst über das cmdlet Set-CMPackageDeployment konfiguriert. Zuerst über Get-CMPackageDeployment eingelesen und dann über die Pipe mithilfe von Set-CMPackageDeployment geändert:

Get-CMPackageDeployment -DeploymentId $CMDeploymentID | Set-CMPackageDeployment -RerunBehavior AlwaysRerunProgram -Schedule $NewCMDeploymentSchedule -StandardProgramName „SomeProgramName“ ​

SCCM Deployment Anleitung Screenshot

Als Powershell cmdlets wurden wie oben dargestellt  u.a. folgende verwendet:

Get-CMDeployment
Get-CMPackageDeployment​

Get-CMDeployment -ProgramName „SomeProgramName“ | select -ExpandProperty DeploymentID

Get-CMDeployment liefert die gewünschte Property DeploymentID, die später verwendet wird.

Das cmdlet Get-CMPackageDeployment besitzt eine ähnliche Property: AdvertisementID. Somit hätte auch das folgende Kommando Verwendung finden können:

Get-CMPackageDeployment -ProgramName „SomeProgramName“ | select -ExpandProperty AdvertisementID

TAGS
PowerShell; System Center; Updates
Nein
Microsoft