2012-12-23 1 views
2

스크립팅은 CLI 용이며 Microsoft 세계에서는 파일을 참조하는 스크립트 인수에 따옴표를 붙이기 위해 공백이 필요할 수 있습니다.인용 된 인수를 PowerShell 스크립트에 전달

이것은 나에게 문제가되는 것으로 나타났습니다. 나는이처럼 PowerShell을 대화 형 환경에서이를 실행하면

#testarg.ps1 
for($i=0; $i -lt $args.length; $i++) 
{ 
    write-host "Arg$i = $($args[$i])" 
} 

:이 스크립트를 고려

PS C:\script> .\testarg.ps1 "first arg" "second arg" 

내가 도착, 예상대로

Arg0 = first arg 
Arg1 = second arg 

그러나 정상적인 사용 스크립트는 대화 형 모드 외부에서 일괄 처리됩니다. 내가 이해하는 한, cmd.exe에서 스크립트를 실행하는 the Microsoft suggested waypowershell.exe path\to\script.ps1 (경로에 공백없이) 인 것 같습니다. 그러나 : 나는 작은 따옴표 사용할 수있는 의도 된 결과를 얻을 주목

Arg0 = first 
Arg1 = arg 
Arg2 = second 
Arg3 = arg 

:

powershell.exe .\testarg.ps1 "first arg" "second arg" 

는 일치하지 않는 결과를 제공

powershell.exe .\testarg.ps1 'first arg' 'second arg' 

을하지만이 종종 때 가능한 아니다 스크립트는 자동으로 인수를 생성하고 전달하는 GUI 도구 및/또는 따옴표 사용의 일관성을 이유로 더 많은 CLI 도구가있는 경우 실행됩니다. 어떤 이유

-file 옵션을 사용하는 경우 : 큰 따옴표가 제대로 작동 -file 옵션 그래서

Arg0 = first arg 
Arg1 = second arg 

:

powershell.exe –file .\testarg.ps1 "first arg" "second arg" 
::(reference to relative path '.\' is optional) 

내가 다시 의도 한 결과를 얻을. 나는 간단하게 작성하여 의도 한 결과를 얻을 수 FTYPE 협회 감안할 때

FTYPE Microsoft.PowerShellScript.1=C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -file "%1" %* 

:이 하나가 같은 것으로 (FTYPE.exe와) ps1 파일을 Windows 파일 형식 연결을 다시 매핑 할 수 있습니다 제안

testarg.ps1 "first arg" "second arg" 

후자는 나를 위해 매우 만족하지만, 내가 PowerShell을 초보자 오전부터 궁금해 : 일반적인 스크립트에 대한

  1. 배치 형태 012,397,045입니다및 대화 형 양식 (PowerShell 내에서) PS > path\to\script.ps1에 상응합니까? 두 가지 형식이 서로 다른 출력/효과를 낼 수있는 경우가 있습니까?
  2. 스크립트 안에 명령 줄을 읽을 수있는 가능한 해결책이 있습니까 (따옴표를 제거하지 않고)? cmd.exe의 경우 *%과 같은 것입니다.

    testarg.ps1 "first arg" "second arg" 
    

    내부 배치 당신이 호출됩니다

답변

1

당신이 쓴 때 이해할 수없는 한 가지가있다? PowerShell.exe에서

, 그것은 작성해야합니다

가 작성해야 cmd.exe에서
cd "c:\Temp" 
& .\testarg.ps1 "first arg" "second arg" 

:

그것은 연관 후 cmd.exe``내에서 의도
powershell –file .\testarg.ps1 "first arg" "second arg" 
+0

'Microsoft.PowerShellScript.1을 '를 PowerShellScript.exe로 입력하십시오. 어쨌든 나는 더 명확하게하기 위해 원래의 질문을 다시 썼다. – antonio

+0

명령 프롬프트에서 'powershell -f testarg.ps1 "첫 번째 arg" "두 번째 arg"'가 방법입니다. 그러나, 참고로, 'powershell. \ testarg.ps1' ""first arg "" "" "second arg" ""'역시 같은 결과를 가져옵니다. 하지만 이것은 파일 형식 연결에 도움이되지 않습니다 ... – mousio