ConfigMgr: Applikationserstellung mit Powershell

Möchte man per Powershell neue Applikationen im ConfigMgr erstellen, so ist dies mittels New-C;Mpplication und Add-CMDeploymentType relativ einfach machbar. Der passende TechNet Artikel (http://technet.microsoft.com/en-us/library/jj870953%28v=sc.20%29.aspx) listet alle verfügbaren Parameter auf. Microsoft hat leider versucht, mit einem Powershell Kommando alle möglichen Deployment Types abzudecken. Gerade im Bereich Scripted Installed (Manual Deployment Type) ist korrekte Zusammenstellung schwierig.

Nachfolgend wird daher ein Beispiel für eine Verteilung einer Anwendung (in diesem Fall aus dem Powershell App Deployment Toolkit), die im Hintergrund ein MSI File installiert. Die Anwendungserkennung soll auf Basis des MSI Produktcodes und der entsprechenden Version erfolgen. Es ist nach meinen Recherchen nicht möglich, per Powershell die eingebauten Detection-Methoden (MSI, File, Directory oder Registry-Werte) zu verwenden. Daher muss diese Funktion mittels einer Powershell Zeile nachgebaut werden.

Zuerst wird eine neue Application erstellt:

$app=New-CMApplication –Name "Testanwendung" -Description "Created by automateAppDeployment from mbaeker.de" –SoftwareVersion "1.0" -AutoInstall $true

Im nächsten Schritt wird das Detectionscript definiert:

$script="Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | where {$_.psChildname -like `"{0000-0000-0000-0000}`" -and $_.DisplayVersion -eq `"1.0.0.0`" -and $_.WindowsInstaller -eq 1}"

Das Script sucht in der Registry im Uninstall Bereich nach einem Unterschlüssel, der dem Productcode entspricht. Darin muss zusätzlich die passende Version hinterlegt sein. Als Zusatzkriterium wird überprüft, ob es sich bei dem Uninstall Eintrag um einem vom Windows Installer erstellten Wert handelt.

Da für den Deployment Type sehr viele Parameter erforderlich sind, wird ein Property Hash mit allen Parametern erstellt. Dies fördert die Übersichtlichkeit:

    $DeploymentTypeHash = @{
                    ApplicationName = "Testanwendung"
                    DeploymentTypeName = "AppDeploy Testanwendung"
                    ScriptInstaller = $true
                    ManualSpecifyDeploymentType=$true
                    DetectDeploymentTypeByCustomScript = $true
                    ScriptType = 'Powershell'
                    ScriptContent = $script
                    AdministratorComment = "Created by automateAppDeployment from mbaeker.de"
                    ContentLocation = "\\cm01\ConfigMgr\Content\Software\Testanwendung"
                    InstallationProgram ='deploy-application.exe'
                    UninstallProgram ='deploy-Application.EXE -DeploymentType "Uninstall"'
                    RequiresUserInteraction = $false
                    InstallationBehaviorType = 'InstallForSystem'
                    InstallationProgramVisibility = 'Normal'
                    LogonRequirementType = 'WhereOrNotUserLoggedOn'
                    }

Im letzten Schritt wird die Verteilmethode mit den angegebenen Werten zur Anwendung hinzugefügt:

Add-CMDeploymentType @DeploymentTypeHash

Das Ergebnis ist eine Neue Anwendung mit einem scriptbasiertem Deployment Type und einer scriptbasierten Erkennung:

Testanwendung-PS

 

This entry was posted in Configuration Manager, Deutsch, Powershell, System Center, System Center 2012 and tagged , , , , . Bookmark the permalink.