powershell 命令重新安装单个 Windows 10 应用程序

powershell 命令重新安装单个 Windows 10 应用程序

我在我们的服务器批处理文件登录脚本中使用了几行单行 powershell 命令,但是我不知道这个命令我做错了什么。

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

当我尝试运行此程序时,出现错误:找不到路径“C:\$($_.InstallLocation)\AppXManifest.xml”

我猜想命令中的引号有问题,但我尝试了不同的方法,但无法使其工作。如果我从 powershell 提示符运行下面的命令,它可以正常工作。

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

如果可能的话,我想避免创建单独的.ps1 文件并将其保存在一行中。

答案1

在 powershell 中,单引号中的字符串(文字字符串)与双引号中的字符串(插值字符串)的处理方式略有不同。

要了解这一点,请考虑以下内容

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

这将输出:

Hello $name
Hello Jones

请注意,变量没有在单引号(文字)字符串中扩展,而是在双引号(插值字符串)中扩展

回到你的问题,问题Register在于Add-AppxPackage 参数 上有单引号,应该是插值字符串。要在批处理文件中转义双引号,你需要使用两个连续的双引号(即"")。换句话说,替换

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

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

相关内容