Powershell-Befehl zum Neuinstallieren einer einzelnen Windows 10-App

Powershell-Befehl zum Neuinstallieren einer einzelnen Windows 10-App

Ich verwende mehrere einzeilige Powershell-Befehle im Batchdatei-Anmeldeskript unseres Servers, kann aber nicht herausfinden, was ich bei diesem falsch mache.

powershell.exe -ExecutionPolicy Bypass -Command "Get-AppxPackage -allusers *Windows.Photos* | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register '$($_.InstallLocation)\AppXManifest.xml'}"

Beim Versuch, dies auszuführen, erhalte ich die Fehlermeldung: Pfad „C:\$($_.InstallLocation)\AppXManifest.xml“ nicht gefunden.

Ich vermute, dass es ein Problem mit den Anführungszeichen im Befehl gibt, aber ich habe es auf verschiedene Arten versucht und es funktioniert nicht. Wenn ich den folgenden Befehl von einer Powershell-Eingabeaufforderung aus ausführe, funktioniert es einwandfrei.

Get-AppxPackage -allusers *Windows.Photos* | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"}

Ich möchte die Erstellung einer separaten PS1-Datei vermeiden und es möglichst auf eine Zeile beschränken.

Antwort1

In Powershell werden Zeichenfolgen in einfachen Anführungszeichen (Literalzeichenfolgen) etwas anders behandelt als solche in doppelten Anführungszeichen (interpolierte Zeichenfolgen).

Um dies zu erkennen, betrachten Sie Folgendes

$name = "Jones"
'Hello $name'
"Hello $name"

Das Ergebnis ist:

Hello $name
Hello Jones

Beachten Sie, dass die Variable nicht in der Zeichenfolge in einfachen Anführungszeichen (Literalzeichen) erweitert wurde, sondern in der Zeichenfolge in doppelten Anführungszeichen (interpolierte Zeichenfolge).

Zurück zu Ihrem Problem: Das Problem besteht darin, dass das RegisterArgument on Add-AppxPackage einfache Anführungszeichen um einen interpolierten String enthält. Um die doppelten Anführungszeichen in einer Batchdatei zu umgehen, müssen Sie zwei aufeinanderfolgende doppelte Anführungszeichen verwenden (also ""). Mit anderen Worten: Ersetzen Sie

-Register '$($_.InstallLocation)\AppXManifest.xml'

mit

-Register ""$($_.InstallLocation)\AppXManifest.xml""

verwandte Informationen