programing

명령줄 파워쉘 파라미터에서 앰퍼샌드, 세미콜론, 컬리브래시를 탈출하는 방법은?

javaba 2023. 9. 6. 22:57
반응형

명령줄 파워쉘 파라미터에서 앰퍼샌드, 세미콜론, 컬리브래시를 탈출하는 방법은?

파워셸 스크립트를 사용하여 데이터베이스 비밀번호 등이 포함된 구성 파일을 생성하고 있습니다.일반적으로 이 스크립트를 사용하는 것은 암호를 생성하고 사용하는 것이지만, 잠깐 동안은 동료 개발자의 데이터베이스에 액세스해야 하므로 암호를 파워셸 스크립트에 전달해야 합니다.

문제는 암호가 앰퍼샌드, 세미콜론, 곱슬곱슬한 교정기 등을 포함하는 횡설수설이라는 점입니다.이 내용을 명령줄에서 파워셸 호출에 전달하려면 어떻게 해야 합니까? (이 답변과 다른 답변은 도움이 되지만 세미콜론과 곱슬곱슬한 교정기에는 도움이 되지 않습니다.)

제가 시도한 것은 다음과 같습니다.

powershell .\makeConfig.ps1 -password "xxx<xxxx;xxxxx&x.xxxx}xx/xxx" -otherparam 3

결과: 오류 메시지:앰퍼샌드(&) 문자는 사용할 수 없습니다.& 연산자는 나중에 사용할 수 있도록 예약되어 있으며 앰퍼샌드를 큰따옴표("&")로 감싸 문자열의 일부로 전달합니다.

powershell .\makeConfig.ps1 -password "xxx<xxxx;xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3

결과: $password의 쓰기 호스트를 수행하면 세미콜론까지만 문자열이 제공됩니다.또한 -otherparam에는 명령줄에 전달한 값이 아닌 기본값이 있습니다.

powershell .\makeConfig.ps1 -password "xxx<xxxx`;xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3

결과: write-host $password가 인용 전 첫 번째 백틱까지 인쇄됩니다.네, 백틱을 출력합니다. 모든 것이 잘못 해석되고 있음을 보여주는 것 같습니다.아, 그리고 대본에서 호출된 다른 기능 중 하나가 전에 본 적이 없는 예외를 던졌습니다("Acquire"라는 예외)."4" 인수가 있는 토큰": "authentication_canceled:사용자가 인증을 취소했습니다"). 이는 매개 변수 구문 분석이 새롭고 매력적인 방식으로 완전히 호싱되었음을 나타냅니다.쓰기 호스트 $password는 다음과 같습니다.

xxx<xxxx;xxxxx`


powershell .\makeConfig.ps1 -password "xxx<xxxx`";`"xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3

결과: write-host $password가 인용 전 첫 번째 백틱까지 인쇄됩니다.그리고 두 번째 파라미터는 기본 상태입니다.(즉, 지난번과 동일한 결과)긍정적인 측면에서, 이전 예에서 던져진 예외는 발생하지 않았습니다.

그러면 Windows 명령줄에서 임의 ASCII 문자열을 전달하여 셸 문자열 매개 변수에 전원을 공급하려면 어떻게 해야 합니까?아니면 적어도 세미콜론, 앰퍼샌드, 곱슬곱슬한 교정기는 어떻게 벗어날 수 있습니까?

powershell .\makeConfig.ps1 -password "'xxx<xxxx;xxxxx&x.xxxx}xx/xxx'" -otherparam 3

여기서

  • 바깥쪽의"큰따옴표는 모든 것을 피할 것입니다.cmd예를 들면 독이 있는 인물<,&"% 부호율호및))!지연 확장이 활성화된 경우 느낌표)를 선택하는 동안
  • 내면의 '아포스트로피(하나의 인용문)는 모든 것에서 벗어날 것입니다.powershell단,'아포스트로피 자체)

그러나 위에 언급된 예외도 벗어날 수 있습니다. 이스케이프 문자, 구분 기호인용문 기사 모두에 근거합니다.

를 있습니다.firebase파워셸 스크립트를 사용합니다.저는 다음과 같은 트리플 더블 인용구를 사용하여 문제를 해결했습니다.firebase deploy --token "$firebaseToken" --project "$firebaseProject" --message """$releaseMessage"""은 . URL 에 있습니다.$releaseMessage더이상 , 는 를 를 는 .

저는 앰퍼와 쿼리 문자열이 있는 GET URI로 구성된 SAS 토큰을 통과하는 동일한 문제를 겪었습니다.

"""$sas"""나를 위해 일했습니다 - 아래를 참조

az storage blob copy start `
    --destination-blob $destinationVHDFileName `
    --destination-container $storageContainerName `
    --account-name $storageAccountName `
    --account-key $storageAccountKey `
    --source-uri """$sas""" `
    --debug `
    --verbose

--%, 구문 분석 중지 토큰을 사용합니다.

powershell .\makeConfig.ps1 -password --% xxx<xxxx;xxxxx&x.xxxx}xx/xxx -otherparam 3

언급URL : https://stackoverflow.com/questions/36142786/how-to-escape-ampersands-semicolons-and-curly-braces-in-command-line-powershel

반응형