Zum Inhalt springen

MDT: PowerShell-Skripte als Anwendung

Mit vermehrter Verwendung des internen MDT-Servers zum Deployment von Kunden-PCs durch meine Kollegen, gibt es auch eine wachsende Anzahl von Wünschen, was das MDT noch alles können soll.
Ein Kollege möchte neben dem angepassten, schlanken Startmenü (sehr verständlich) die Möglichkeit haben optional diverse Builtin-Apps zu deinstallieren.

In einem früheren Beitrag habe ich schon einmal ein Skript der „DeploymentGuys“ vorgestellt, welches alle angegebenen Apps in einem Rutsch deinstalliert. Dies liesse sich als Schritt in der Task Sequenz einbinden. Der Nachteil hierbei ist für mich, dass ich nur „Alles oder Nichts“ hätte.

Man müßte also auf diesem Weg zwei Task Sequenzen erstellen, um einmal eine Installation mit und einmal ohne Apps bereitzustellen. Da meine Task Sequenzen ziemlich viel zusätzliche Schritte beinhalten, hätte ich alle sechs Monate mit den Release-Wechsel von Windows 10 eine Menge Arbeit.
Daher bräuchte man einen anderen Weg.

Als Alternative bietet sich an, das PowerShell-Skript anzupassen und dann ins MDT als Anwendung einzubinden.
Zunächst benötigt man die Liste der Apps, die auf einem Standard-System vorhanden sind.
Diese erhält man mit „Get-Appxpackage | select-object name | sort-object name„.

An dieser Stelle gleich ein Hinweis: einige der Apps (z.B. Cortana) sollte man auf dem System belassen, da sie meines Erachtens tief ins System eingreifen und ein Fehlen seltsame Nebeneffekte haben kann. Mitunter verlassen sich andere Apps auf deren Anwesenheit und erzeugen die seltsamsten Fehlermeldungen und Probleme, deren Ursache man ewig sucht.
Für solche Apps braucht es andere Methoden, um sie stillzulegen.

Im folgenden soll die „Bing Wetter App“ erst dann deinstalliert werden, wenn sie unter Application im MDT während des Assistenten ausgewählt wird.
Das oben angesprochene PowerShell-Skript sähe dann angepasst wie folgt aus:

$AppsList = "Microsoft.BingWeather"

ForEach ($App in $AppsList)
{
$Packages = Get-AppxPackage | Where-Object {$_.Name -eq $App}
if ($Packages -ne $null)
{
      Write-Verbose "Removing Appx Package: $App"
      foreach ($Package in $Packages)
      {
      Remove-AppxPackage -package $Package.PackageFullName
      }
}
else
{
      Write-Verbose "Unable to find package: $App"
}
$ProvisionedPackage = Get-AppxProvisionedPackage -online | Where-Object {$_.displayName -eq $App}
if ($ProvisionedPackage -ne $null)
{
      Write-Verbose "Removing Appx Provisioned Package: $App"
      remove-AppxProvisionedPackage -online -packagename $ProvisionedPackage.PackageName
}
else
{
      Write-Verbose "Unable to find provisioned package: $App"
}
}

Man speichert es mit einem eindeutigen Namen in einem Ordner auf dem MDT-Server. (hier: Remove-TSBuiltinBingWetter.ps1) und importiert es als neue Anwendung mit der Option „Application with source files“.

Der Kniff ist an dieser Stelle die korrekte Syntax zu verwenden, damit das Deployment auch erfolgreich verläuft.
Dazu ist es zum einen notwendig, die Execution Policy zu umgehen und zum anderen als Pfad den lokalen Pfad der „Anwendung“ mit einem vorangestellten „.\“ angeben.
Im Assistenten unter „Command Details“ sollte somit „powershell.exe -ExecutionPolicy Bypass -Command „.\Remove-TSBuiltinGames.ps1““ stehen.

Ab der nächsten Installation kann dann flexibel entschieden werden, ob „Bing Wetter“ entfernt werden soll oder nicht.

Jetzt hat man das Werkzeug, um für weitere Builtin-Apps die Skripte schnell zu erstellen und einzubinden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert