comando powershell para reinstalar um único aplicativo do Windows 10

comando powershell para reinstalar um único aplicativo do Windows 10

Eu uso vários comandos powershell de uma linha no script de login de arquivo em lote de nossos servidores, mas não consigo descobrir 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'

Suponho que há um problema com a citação no comando, mas tentei maneiras diferentes e não consigo fazê-lo funcionar. Se eu executar o comando abaixo em 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 uma única linha, se possível.

Responder1

No PowerShell, strings entre aspas simples (strings literais) são tratadas de maneira um pouco diferente daquelas entre 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 string entre aspas simples (literal), mas foi expandida na string entre aspas duplas (string interpolada)

Voltando ao seu problema, o problema é que o Registerargumento on Add-AppxPackage tem aspas simples em torno do que deveria ser uma string interpolada. Para escapar das aspas duplas em um arquivo em lote, você precisará usar duas aspas duplas consecutivas (ou seja, ""). Em outras palavras, substitua

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

com

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

informação relacionada