단일 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""

관련 정보