comando powershell para reinstalar o único aplicativo do Windows 10

0

Eu uso vários comandos powershell de uma linha em nosso script de login de arquivo de lote de servidores, mas não consigo entender o que estou fazendo de errado com este.

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

Quando tento executar isso, recebo o erro: Não é possível encontrar o caminho 'C: \ $ ($ _. InstallLocation) \ AppXManifest.xml'

Eu estou supondo que há um problema com a cotação no comando, mas eu tentei maneiras diferentes e não consigo fazê-lo funcionar. Se eu executar o comando abaixo de um prompt do powershell, ele funcionará bem.

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

Eu gostaria de evitar ter que criar um arquivo .ps1 separado e mantê-lo em um forro, se possível.

    
por D. Stevenson 21.09.2016 / 17:13

1 resposta

1

No powershell, as strings em aspas simples (strings literais) são tratadas de maneira ligeiramente diferente das aspas duplas (strings interpoladas).

Para ver isso, considere o seguinte

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

Isso produzirá:

Hello $name
Hello Jones

Observe como a variável não foi expandida na única string entre aspas (literal), mas foi expandida na aspas duplas (string interpolada)

Voltando ao seu problema, o problema é que o argumento Register em Add-AppxPackage tem aspas simples em torno do que deve ser uma string interpolada. Para escapar das aspas duplas em um arquivo de lote, você precisará usar duas aspas duplas consecutivas (por exemplo, "" ). Em outras palavras, substitua

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

com

-Register ""$($_.InstallLocation)\AppXManifest.xml""
    
por 25.09.2016 / 17:37

Tags