PowerShell은 문자열로 시작하는 명령을 볼 때 문자열을 평가합니다. 즉, 일반적으로 다음과 같이 화면에 에코합니다.
PS> "Hello World"
Hello World
PowerShell이 문자열을 명령 이름으로 해석하도록하려면 다음과 같이 호출 연산자 (&)를 사용하십시오.
PS> & 'C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe'
그 후에 공백이나 인용 부호가 포함 된 매개 변수 / 인수 쌍만 인용하면됩니다. 복잡한 명령 줄 인수를 사용하여 이와 같은 EXE 파일을 호출 할 때 PowerShell에서 인수를 EXE 파일로 보내는 방법을 보여주는 도구를 사용하는 것이 일반적으로 매우 유용합니다. PowerShell을 커뮤니티 확장은 이러한 도구가 있습니다. 이를 echoargs라고합니다. EXE 파일을 echoargs로 바꾸면됩니다. 모든 인수는 그대로두고 EXE 파일이 인수를받는 방법을 보여줍니다.
PS> echoargs -verb:sync -source:dbfullsql="Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;" -dest:dbfullsql="Data Source=.\mydestsource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;",computername=10.10.10.10,username=administrator,password=adminpass
Arg 0 is <-verb:sync>
Arg 1 is <-source:dbfullsql=Data>
Arg 2 is <Source=mysource;Integrated>
Arg 3 is <Security=false;User>
Arg 4 is <ID=sa;Pwd=sapass!;Database=mydb;>
Arg 5 is <-dest:dbfullsql=Data>
Arg 6 is <Source=.\mydestsource;Integrated>
Arg 7 is <Security=false;User>
Arg 8 is <ID=sa;Pwd=sapass!;Database=mydb; computername=10.10.10.10 username=administrator password=adminpass>
echoargs를 사용하면 다음과 같이 올바르게 얻을 때까지 실험 할 수 있습니다.
PS> echoargs -verb:sync "-source:dbfullsql=Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;"
Arg 0 is <-verb:sync>
Arg 1 is <-source:dbfullsql=Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;>
연결 문자열 주위에 큰 따옴표를 유지하기 전에 너무 열심히 노력한 것으로 나타났습니다. cmd.exe조차도 그것들을 제거하기 때문에 필요하지 않습니다.
BTW, PowerShell 팀을 싫어합니다. 내부 큰 따옴표를 그대로 유지 해야하는 경우 원하는 결과를 얻기 위해 작은 따옴표와 큰 따옴표의 특정 주문을 표시하는 데 매우 도움이되었습니다. :-) 그들은 또한 이것이 고통의 영역이라는 것을 알고 있지만, 특정 문제의 영향을받는 사람들의 수에 의해 주도됩니다. 이것이 어려운 영역이라면이 PowerShell 버그 제출에 투표하십시오 .
PowerShell 구문 분석 방법에 대한 자세한 내용은 효과적인 PowerShell 블로그 시리즈 , 특히 항목 10- "PowerShell 구문 분석 모드 이해"를 참조하십시오.
2012 년 4 월 4 일 업데이트 :이 상황은 PowerShell V3에서 훨씬 쉽게 처리 할 수 있습니다. 자세한 내용은이 블로그 게시물을 참조하십시오 .