2014-03-06 2 views
3

$args에 따옴표를 유지할 수 있습니까?

스크립트는 다음과 같이 호출됩니다

.\test1.ps1 a=application o="this object" msg_text="this is a text" 

따옴표는 추가 처리를 위해 필수입니다. 내부에 보관할 수있는 방법이 있습니까 $args?

+0

인용되는 그 문자열이 항상 필요합니까? – mjolinor

답변

2

입력 매개 변수를 수정할 수 없다면 생각할 수있는 유일한 방법은 여전히 ​​다소 불리는 명령을 수정해야한다는 것입니다.

따옴표를 유지하려면 PowerShell 스크립트가 호출 된 전체 명령 줄을 캡처 해보십시오. 그런 다음이 스크립트는이 방법으로 호출되는 경우 반환되는 것입니다

Write-Host (Get-WmiObject -Query "select CommandLine from Win32_Process where CommandLine like '%test1%'").CommandLine 

:

그래서 나는 test1.ps1 스크립트에 넣고

PS C:\temp> powershell .\test1.ps1 a=application o="this object" msg_text="this is a text" 
"C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe" .\test1.ps1 a=application "o=this object" "msg_text=this is a text" 

이는 경우에만 가능합니다 그러나 PowerShell의 새 인스턴스가 호출됩니다. 그렇지 않으면이 메서드에서 매개 변수를 사용할 수 없습니다.

PS C:\temp> .\test1.ps1 a=application o="this object" msg_text="this is a text" > zzz3.txt 

PS C:\temp> 

물론이 접근법을 취하면 수동으로 입력 인수를 구문 분석해야하는데, 이는 $args 오브젝트의 도움으로 수행 할 수 있습니다. 그것은 장거리이지만 견적을 보존합니다.

+0

위의 주석 참조) 불행히도 매개 변수 형식이 적용되는 방식에 영향을주지 않습니다. – user3322838

+0

WMI에서 전체 명령 줄을 얻으려면 응답을 수정했습니다. 이것은 장거리이지만 올바른 방향으로 올릴 수 있습니다. – CJBS

2

당신은 역 따옴표로 PowerShell의 따옴표를 탈출 할 수

.\test1.ps1 a=application o="`"this object`"" msg_text="`"this is a text`"" 

할 수도 있습니다 둥지 이중 따옴표 (또는 그 반대) 내부 따옴표하지만 변수는 작은 따옴표로 구분 된 문자열로 평가되지 않도록 조심.

.\test1.ps1 a=application o='"this object"' msg_text='"this is a text"' 

또한 $args을 사용하는 이유는 무엇입니까? 대규모 강력한 내장 매개 변수 시스템을 사용하지 않는 이유는 무엇입니까?

추가 읽기 :

Get-Help About_Quoting_Rules

Stack Overflow - How to Handle Command Line Arguments in PowerShell

TechNet Magazine - Windows PowerShell: Defining Parameters

+0

필자는 inbuilt 시스템을 사용하려고했지만 스크립트 만 제공하고 매개 변수 형식이 어떤 영향을 미치지 않습니다. – user3322838

+1

+1 이것은 좋은 대답입니다. 추가 참조 및 Powershell의 스크립트 인수 기능 측면에서 더 정교합니다. – CJBS

+1

@CJBS 내가 게시 한 후에야 답변을 보지 못했습니다 (나는 우리가 1 ~ 2 분 안에 게시 한 것으로 생각합니다.) 서로) +1. 당신의 새로운 대답에 +1은 상당히 영리한 접근이라고 생각합니다. – Nacimota

관련 문제