用於重新安裝單一 Windows 10 應用程式的 powershell 命令

用於重新安裝單一 Windows 10 應用程式的 powershell 命令

我在伺服器批次檔登入腳本中使用了幾個一行 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""

相關內容