
Ich bin auf der Suche nach einer Anleitung zur Durchführung der oben genannten Aufgabe.
Mein Powershell-Skript sieht wie folgt aus. Das Skript entfernt derzeit eine bestimmte benannte App.
$AppsToDelete="*Microsoft.WindowsReadingList*"
Foreach ($AppName in $AppsToDelete)
{
get-appxprovisionedpackage -online | where packagename -like $AppName | remove-appxprovisionedpackage -Online
Get-AppxPackage -name $AppName -allusers | Remove-AppxPackage
}
Das von SCCM2012 zum Ausführen des Skripts verwendete Programm ist wie folgt:
PowerShell.exe -ExecutionPolicy UnRestricted -File .\delappsreadinglistonly.ps1
Ich habe ein Programm in SCCM 2012 erstellt und auf einem Client bereitgestellt.
Das Programm wird als Benutzer und nicht als System ausgeführt.
Die Datei EXECMGR.log zeigt mir an, dass das Skript vom Client empfangen wurde und erfolgreich ausgeführt wurde, Exitcode = 0, der Ausführungsstatus ist „Erfolgreich“.
Allerdings befindet sich die Kachel „Leseliste“ immer noch auf dem (Metro?) Startbildschirm, die App „Leseliste“ wird immer noch in der alphabetischen Liste „Apps nach Namen“ angezeigt und kann ausgeführt werden, und verschiedene Ordner sind immer noch in C:\Programme\WindowsApps\ vorhanden.
Hinweise wären willkommen.
Antwort1
Ich sehe zwei mögliche Probleme mit Ihrem Skript:
- Die Aufrufe
-AppxProvisionedPackage
erfordern höchstwahrscheinlich eine Erhöhung der Rechte. Wenn Sie Ihr Skript als Benutzer ausführen, wird wahrscheinlich eine Ausnahme ausgelöst. - Der Aufruf
Get-AppxPackage -allusers
erfordert Administratorrechte. Die Dokumentationlautet-allusers
: „Um diesen Parameter zu verwenden, müssen Sie den Befehl mit Administratorberechtigungen ausführen.“
Mir ist nicht ganz klar, was Ihr Ziel ist. So gehe ich mit dem Kachelchaos auf dem Windows 8.1-Startbildschirm um:
- Erstellen Sie eine SCCM-Anwendung mit den folgenden Eigenschaften:
- kein Installer
- Deinstallationsprogramm, das
Remove-AppxPackage
eine Liste gängiger Apps aufruft - Erkennungsskript für diese Liste von Apps
- Stellen Sie die Anwendung mit der Deinstallationsaktion auf den betroffenenBenutzer.
Ich verwende diese Strategie, weil dadurch gezielter entschieden werden kann, welche dieser Apps bestimmten Benutzern in Zukunft zur Verfügung stehen, falls sich dies als notwendig erweisen sollte.
Wenn ein Benutzer angemeldet ist, dem diese Anwendung zur Entfernung bereitgestellt wurde, CcmExec
erkennt dieser die Anwendung und ruft den Deinstallationsbefehl auf. Nach dem Aufruf des Deinstallationsbefehls sollten die Anwendungen für den Benutzer nicht mehr sichtbar oder verfügbar sein.
Uninstall-Application.ps1
Hier ist der Text des Deinstallationsskripts, das ich verwende. Sie müssen vorsichtig sein, wie Sie PowerShell-Skripts einrichten, die für die (De-)Installation aufgerufen werden, weilExit-Codes sind etwas schwierig zuverlässig aus dem Skript zu bekommen.
$appList = 'Microsoft.BingSports',
# ...longlist of other apps...
'Microsoft.WindowsReadingList'
Get-AppxPackage |
? { $_.Name -in $appList } |
% { Remove-AppxPackage $_.PackageFullName }
Detect-Application.ps1
Unten sehen Sie den Hauptteil des von mir verwendeten Erkennungsskripts. Beachten Sie, dass die Verwendung von PowerShell-Erkennungsskripts einige Fallstricke mit sich bringt:
- Sie müssen die Skripte signieren, wenn Sie eine
xSigned
Ausführungsrichtlinie auf einem Client haben, unabhängig davon, was in den Clienteinstellungen und Protokollen zur Verwendung angegeben ist-ByPass
. - Die Semantik der Ausgabe des Erkennungsskripts ist geheimnisvoll undnur inoffiziell dokumentiert, aber IME sind zuverlässig.
- Sie müssen Ihre PowerShell-Erkennungsskripte mitAdam Meltzers Problemumgehungum sie zum Arbeiten zu bringen.
- Sie sollten sich auch zumindest darüber im Klaren seineinige Eigenheiten in Bezug auf den Kontext, in dem PowerShell-Erkennungsskripte ausgeführt werden.
Wenn Sie all dies tun, funktionieren PowerShell-Erkennungsskripte wunderbar für komplizierte, chirurgische oder unkonventionelle Erkennungen wie diese.
$appList = 'Microsoft.BingSports',
# ...longlist of other apps...
'Microsoft.WindowsReadingList'
Get-AppxPackage |
? { $_.Name -in $appList }