Comando powershell para reinstalar una sola aplicación de Windows 10

Comando powershell para reinstalar una sola aplicación de Windows 10

Utilizo varios comandos de PowerShell de una línea en el script de inicio de sesión de archivos por lotes de nuestros servidores, pero no puedo entender qué estoy haciendo mal con este.

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

Cuando intento ejecutar esto, aparece el error: No se puede encontrar la ruta 'C:\$($_.InstallLocation)\AppXManifest.xml'

Supongo que hay un problema con las comillas en el comando, pero lo he intentado de diferentes maneras y no puedo hacerlo funcionar. Si ejecuto el siguiente comando desde un símbolo del sistema de PowerShell, funciona bien.

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

Me gustaría evitar tener que crear un archivo .ps1 separado y mantenerlo en una sola línea si es posible.

Respuesta1

En PowerShell, las cadenas entre comillas simples (cadenas literales) se tratan de forma ligeramente diferente a las entre comillas dobles (cadenas interpoladas).

Para ver esto, considere lo siguiente

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

Esto generará:

Hello $name
Hello Jones

Observe cómo la variable no se expandió en la cadena entre comillas simples (literal), sino en la cadena entre comillas dobles (interpolada).

Volviendo a su problema, el problema es que el Registerargumento Add-AppxPackage tiene comillas simples sobre lo que debería ser una cadena interpolada. Para evitar las comillas dobles en un archivo por lotes, deberá utilizar dos comillas dobles consecutivas (es decir, ""). En otras palabras, reemplazar

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

con

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

información relacionada