Ich habe ein Powershell-Skript erstellt, um den Windows Store und Cortana unter Windows 10 zu entfernen. Ich habe das Skript erfolgreich erstellt und getestet. Jetzt habe ich das Skript zu den LogonScripts in einem GPO hinzugefügt und getestet, ob das Skript auch erfolgreich ausgeführt wird. Aber es tut nicht, was es tun sollte.
Zunächst einmal ist dies das Skript:
$WSV =(Get-AppxPackage -Name "*WindowsStore*").name
if ($WSV -eq "Microsoft.WindowsStore")
{Get-AppxPackage -allusers "*WindowsStore*" | Remove-AppxPackage}
$Cor =(Get-AppxPackage -Name Microsoft.549981C3F5F10).name
if ($Cor -eq "Microsoft.549981C3F5F10")
{Get-AppxPackage -allusers Microsoft.549981C3F5F10 | Remove-AppxPackage}
Es prüft lediglich, ob das AppX-Paket vorhanden ist, und entfernt es, wenn es vorhanden ist. Dies funktioniert, wenn das Skript manuell gestartet wird. Als Anmeldeskript funktioniert es jedoch nicht. Mein erster Gedanke war, dass das Skript überhaupt nicht ausgeführt wird. Also habe ich die Erstellung eines Ordners im C-Root-Verzeichnis hinzugefügt und kann durch die Erstellung dieses Ordners bestätigen, dass das Skript ausgeführt wird.
Warum funktioniert es also nicht wie gewünscht? Gibt es eine Möglichkeit, die Fehlermeldung des Skripts irgendwie abzurufen?
Die Ausführungsrichtlinie unterliegt keinen Einschränkungen. Sie wird in der Computerkonfiguration der Gruppenrichtlinie ausgeführt und sollte daher über Computerrechte verfügen.
Antwort1
Wird als Startskript und nicht als Anmeldeskript ausgeführt, da der Befehl den -AllUsers
Parameter verwendet, um sicherzustellen, dass beim Ausführen die Berechtigung zum Entfernen der Pakete für alle Benutzer ausreicht.
Ich würde es auch in das Skript einfügen, Set-ExecutionPolicy Unrestricted
obwohl Sie sagen, dass Sie die Ausführungsrichtlinie für alle Fälle bereits entsprechend eingestellt haben.
Abschließend möchte ich sagen, dass zum Entfernen des Pakets der vollständige Paketname erforderlich ist. Verwenden Sie daher die folgende PowerShell, um diesen für die App abzurufen, die Sie entfernen.
Verwenden Sie zur Lösung die PowerShell-Logik, wie in den folgenden Befehlen angegeben, und nicht die Logik, die Sie aktuell verwenden.
Power Shell
Set-ExecutionPolicy Unrestricted;
Get-AppxProvisionedPackage –Online | % {
If($_.DisplayName -eq "Microsoft.WindowsStore")
{Remove-AppxProvisionedPackage -Online -PackageName $_.PackageName}
};
Get-AppxProvisionedPackage –Online | % {
If($_.DisplayName -eq "Microsoft.549981C3F5F10")
{Remove-AppxProvisionedPackage -Online -PackageName $_.PackageName}
};
"Microsoft.WindowsStore" | %{
$p = (Get-AppxPackage -Name $_ | %{$_.PackageFullName});
If($p){Remove-AppxPackage -Package $p -AllUsers};
};
"Microsoft.549981C3F5F10" | %{
$p = (Get-AppxPackage -Name $_ | %{$_.PackageFullName});
If($p){Remove-AppxPackage -Package $p -AllUsers};
};
Unterstützende Ressourcen
Antwort2
Ihr PowerShell-Code ist falsch.
$WSV =(Get-AppxPackage -Name "*WindowsStore*").name
# can also be written as
$WSV = Get-AppxPackage -Name "*WindowsStore*" | Select-Object -ExpandProperty Name
Diese Abfrage gibt manchmal ein Array zurück, abhängig von der Anzahl der zurückgegebenen Elemente:
PS > Get-Item *.html, *.log
Directory: /Users/megamorf
Mode LastWriteTime Length Name
---- ------------- ------ ----
----- 06.04.2020 18:04 730 back-to-work.html
----- 05.10.2020 12:32 4269 jmeter.log
----- 28.09.2020 14:41 246873 olv.log
----- 20.10.2020 16:28 170945 web.log
PS > $Result = (Get-Item "*.log").Name
PS > $Result.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
PS > $Result = (Get-Item "*.html").Name
PS > $Result.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
Der Vergleichsoperator -eq
ist nicht korrekt, wenn Sie mit Arrays arbeiten. In diesem Fall müssen Sie -in
( $obj -in $array
) oder -contains
( $array -contains $obj
) verwenden.
Der gesamte Code kann wie folgt vereinfacht werden:
$AppsToDelete = @("Microsoft.WindowsStore", "Microsoft.549981C3F5F10")
foreach ($UnwantedApp in $AppsToDelete) {
Get-AppxPackage -Name $UnwantedApp -AllUsers | Remove-AppxPackage
}