배치 파일에서 PowerShell 스크립트로 매개 변수 전달


90

배치 파일에서 다음과 같이 PowerShell 스크립트를 호출합니다.

powershell.exe "& "G:\Karan\PowerShell_Scripts\START_DEV.ps1"

이제 문자열 매개 변수를 START_DEV.ps1. 매개 변수가라고 가정 해 보겠습니다 w=Dev.

어떻게 할 수 있습니까?


1
스크립트에 명명 된 매개 변수 또는 익명 매개 변수가 필요합니까?
vonPryz 2011 년

답변:


142

Dev배치 파일에서 문자열 을 매개 변수로 전달하고 싶다고 가정 해 보겠습니다 .

powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev"

powershell 스크립트 헤드 안에 넣으십시오.

$w = $args[0]       # $w would be set to "Dev"

내장 변수를 사용하려는 경우이 옵션을 사용합니다 $args. 그렇지 않으면:

 powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 -Environment \"Dev\""

powershell 스크립트 헤드 내부 :

param([string]$Environment)

명명 된 매개 변수가 필요한 경우

오류 수준 반환에 관심이있을 수도 있습니다.

powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev; exit $LASTEXITCODE"

오류 수준은 배치 파일 내에서 %errorlevel%.


24

스크립트가 아래 스 니펫과 같고 이름이 testargs.ps1이라고 가정합니다.

param ([string]$w)
Write-Output $w

명령 줄에서 다음과 같이 호출 할 수 있습니다.

PowerShell.Exe -File C:\scripts\testargs.ps1 "Test String"

콘솔에 "Test String"(따옴표없이)이 인쇄됩니다. "테스트 문자열"은 스크립트에서 $ w 값이됩니다.


13

스크립트가로드되면 전달되는 모든 매개 변수가 특수 변수에 자동으로로드됩니다 $args. 먼저 선언하지 않고 스크립트에서 참조 할 수 있습니다.

예를 들어,라는 파일을 만들고 그 자체로 한 줄에 test.ps1변수 $args를 갖습니다 . 이와 같은 스크립트를 호출하면 다음 출력이 생성됩니다.

PowerShell.exe -File test.ps1 a b c "Easy as one, two, three"
a
b
c
Easy as one, two, three

일반적인 권장 사항으로 PowerShell을 직접 호출하여 스크립트를 호출 할 때 -File암시 적으로 옵션을 사용하는 대신 옵션을 사용하는 것이 좋습니다 &. 특히 중첩 된 따옴표를 처리해야하는 경우 명령 줄을 좀 더 깔끔하게 만들 수 있습니다.


7

ps1 파일 상단에 매개 변수 선언 추가

test.ps1

param(
  # Our preferred encoding
  [parameter(Mandatory=$false)]
  [ValidateSet("UTF8","Unicode","UTF7","ASCII","UTF32","BigEndianUnicode")]
  [string]$Encoding = "UTF8"
)

write ("Encoding : {0}" -f $Encoding)

결과

C:\temp> .\test.ps1 -Encoding ASCII
Encoding : ASCII

6

@Emiliano의 대답은 훌륭합니다. 다음과 같이 명명 된 매개 변수를 전달할 수도 있습니다.

powershell.exe -Command 'G:\Karan\PowerShell_Scripts\START_DEV.ps1' -NamedParam1 "SomeDataA" -NamedParam2 "SomeData2"

매개 변수는 명령 호출 외부에 있으며 다음을 사용합니다.

[parameter(Mandatory=$false)]
  [string]$NamedParam1,
[parameter(Mandatory=$false)]
  [string]$NamedParam2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.