Comando powershell per reinstallare un'unica app di Windows 10


0

Uso diversi comandi PowerShell a una riga nello script di accesso al file batch dei nostri server ma non riesco a capire cosa sto facendo di sbagliato in questo.

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

Quando provo a eseguirlo, visualizzo l'errore: Impossibile trovare il percorso 'C: \ $ ($ _. InstallLocation) \ AppXManifest.xml'

Immagino che ci sia un problema con la citazione nel comando, ma ho provato diversi modi e non riesco a farlo funzionare. Se eseguo il comando seguente da un prompt di PowerShell funziona benissimo.

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

Vorrei evitare di dover creare un file .ps1 separato e conservarlo in una riga, se possibile.


1
La sintassi della virgoletta singola e della virgoletta doppia finale non è corretta nel primo comando.
Ramhound,

Potresti per favore elaborare? Ho pensato che stavo facendo qualcosa di sbagliato con le virgolette ma non importa quali combinazioni di virgolette doppie o singole provo non riesco a farlo funzionare.
D. Stevenson,

Risposte:


1

In PowerShell, le stringhe tra virgolette singole (stringhe letterali) sono trattate in modo leggermente diverso da quelle tra virgolette doppie (stringhe interpolate).

Per vedere questo, considera quanto segue

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

Questo produrrà:

Hello $name
Hello Jones

Notare come la variabile non è stata espansa nella stringa a virgolette singole (letterale), ma è stata espansa nella stringa a virgolette doppie (stringa interpolata)

Tornando al tuo problema, il problema è che l' Registerargomento Add-AppxPackage ha virgolette singole attorno a quella che dovrebbe essere una stringa interpolata. Per evitare le doppie virgolette in un file batch, dovrai usare due doppie virgolette consecutive (ad es "".). In altre parole, sostituire

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

con

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

Alex, grazie per la tua risposta. Quando provo il comando con virgolette doppie come suggerito ora ricevo l'errore: la stringa manca del terminatore: ".
D. Stevenson

Il comando completo che sto provando ora è: powershell.exe -ExecutionPolicy Bypass -Command "Get-AppxPackage -AllUsers *Windows.Photos* | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register ""$($_.InstallLocation)\AppXManifest.xml""}"
D. Stevenson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.