$args
에 따옴표를 유지할 수 있습니까?
스크립트는 다음과 같이 호출됩니다
.\test1.ps1 a=application o="this object" msg_text="this is a text"
따옴표는 추가 처리를 위해 필수입니다. 내부에 보관할 수있는 방법이 있습니까 $args
?
$args
에 따옴표를 유지할 수 있습니까?
스크립트는 다음과 같이 호출됩니다
.\test1.ps1 a=application o="this object" msg_text="this is a text"
따옴표는 추가 처리를 위해 필수입니다. 내부에 보관할 수있는 방법이 있습니까 $args
?
입력 매개 변수를 수정할 수 없다면 생각할 수있는 유일한 방법은 여전히 다소 불리는 명령을 수정해야한다는 것입니다.
따옴표를 유지하려면 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
오브젝트의 도움으로 수행 할 수 있습니다. 그것은 장거리이지만 견적을 보존합니다.
위의 주석 참조) 불행히도 매개 변수 형식이 적용되는 방식에 영향을주지 않습니다. – user3322838
WMI에서 전체 명령 줄을 얻으려면 응답을 수정했습니다. 이것은 장거리이지만 올바른 방향으로 올릴 수 있습니다. – CJBS
당신은 역 따옴표로 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
을 사용하는 이유는 무엇입니까? 대규모 강력한 내장 매개 변수 시스템을 사용하지 않는 이유는 무엇입니까?
추가 읽기 :
Stack Overflow - How to Handle Command Line Arguments in PowerShell
필자는 inbuilt 시스템을 사용하려고했지만 스크립트 만 제공하고 매개 변수 형식이 어떤 영향을 미치지 않습니다. – user3322838
+1 이것은 좋은 대답입니다. 추가 참조 및 Powershell의 스크립트 인수 기능 측면에서 더 정교합니다. – CJBS
@CJBS 내가 게시 한 후에야 답변을 보지 못했습니다 (나는 우리가 1 ~ 2 분 안에 게시 한 것으로 생각합니다.) 서로) +1. 당신의 새로운 대답에 +1은 상당히 영리한 접근이라고 생각합니다. – Nacimota
인용되는 그 문자열이 항상 필요합니까? – mjolinor