programing

단일 PowerShell 스크립트 매개 변수에 여러 값 전달

elecom 2023. 4. 18. 21:44
반응형

단일 PowerShell 스크립트 매개 변수에 여러 값 전달

$args로 서버 이름을 전달하는 스크립트가 있습니다.

이 방법으로 이 (이들)서버에 대한 작업을 수행할 수 있습니다.foreach:

.\script.ps1 host1 host2 host3

foreach ($i in $args)
{
    Do-Stuff $i
}

vlan이라는 이름의 옵션 파라미터를 추가하고 싶습니다.시도했습니다.

Param(
    [string]$vlan
)

foreach ($i in $args)
{
    Write-Host $i
}
Write-Host $vlan

합격하면 된다.-vlan파라미터가 할당되지 않은 경우 스크립트는 마지막 서버 이름을 자동으로 할당합니다.$vlan.

그러면 PowerShell 스크립트에 단일 또는 여러 매개 변수와 옵션 이름 지정 매개 변수를 전달하려면 어떻게 해야 할까요?

이상적으로는 다음과 같은 유효한 예를 들 수 있습니다.

.\script.ps1 host1
.\script.ps1 host1 host2 host3
.\script.ps1 host1 host2 -vlan office

가장 쉬운 방법은 다음 두 가지 파라미터를 사용하는 것입니다.하나는 호스트용(어레이일 수 있음)이고 다른 하나는 VLAN용입니다.

param([String[]] $Hosts, [String] $VLAN)

대신

foreach ($i in $args)

사용할 수 있습니다.

foreach ($hostName in $Hosts)

호스트가 1개뿐일 경우 foreach 루프는 1회만 반복됩니다.여러 호스트를 스크립트에 전달하려면 해당 호스트를 어레이로 전달합니다.

myScript.ps1 -Hosts host1,host2,host3 -VLAN 2

...혹은 비슷한 것.

한 가지 방법은 다음과 같습니다.

 param(
       [Parameter(Position=0)][String]$Vlan,
       [Parameter(ValueFromRemainingArguments=$true)][String[]]$Hosts
    ) ...

이렇게 하면 여러 호스트를 공백으로 입력할 수 있습니다.

파라미터는 인수 앞에 입력을 받습니다.대신 배열을 받아들이는 매개 변수를 추가하여 첫 번째 위치 매개 변수로 만들어야 합니다.예:

param(
    [Parameter(Position = 0)]
    [string[]]$Hosts,
    [string]$VLAN
    )

foreach ($i in $Hosts)  
{ 
    Do-Stuff $i
}

그럼 이렇게 불러주세요.

.\script.ps1 host1, host2, host3 -VLAN 2

값 사이의 쉼표에 주의해 주세요.배열로 수집합니다.

yml 파일에서 이 작업을 수행하는 동안 문제가 발생했습니다. 그리고 다음 링크를 찾았고 스크립트 앞에 "-Command"를 추가하여 해결했습니다.

https://michlstechblog.info/blog/powershell-passing-an-array-to-a-script-at-command-line/

스케줄된 스크립트를 호출합니다.이 스크립트는 다음과 같이 서버 목록에 접속해야 합니다.

Powershell.exe -File "YourScriptPath" "Par1,Par2,Par3"

다음으로 스크립트 내:

param($list_of_servers)
...
Connect-Viserver $list_of_servers.split(",")

분할 연산자가 문자열 배열을 반환합니다.

언급URL : https://stackoverflow.com/questions/15120597/passing-multiple-values-to-a-single-powershell-script-parameter

반응형