서버 배치 파일 로그인 스크립트에서 여러 한 줄의 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""