Passing multiple values to a single PowerShell script parameter

后端 未结 4 1785
长发绾君心
长发绾君心 2020-12-04 14:52

I have a script to which I pass server name(s) in $args.

This way I can do stuff to this (these) server(s) using foreach:

.\\script.ps1          


        
相关标签:
4条回答
  • 2020-12-04 15:23

    The easiest way is probably to use two parameters: One for hosts (can be an array), and one for vlan.

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

    Instead of

    foreach ($i in $args)
    

    you can use

    foreach ($hostName in $Hosts)
    

    If there is only one host, the foreach loop will iterate only once. To pass multiple hosts to the script, pass it as an array:

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

    ...or something similar.

    0 讨论(0)
  • 2020-12-04 15:23

    I call a scheduled script who must connect to a list of Server this way:

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

    Then inside the script:

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

    The split operator returns an array of string

    0 讨论(0)
  • 2020-12-04 15:25

    One way to do it would be like this:

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

    This would allow multiple hosts to be entered with spaces.

    0 讨论(0)
  • 2020-12-04 15:45

    Parameters take input before arguments. What you should do instead is add a parameter that accepts an array, and make it the first position parameter. ex:

    param(
        [Parameter(Position = 0)]
        [string[]]$Hosts,
        [string]$VLAN
        )
    
    foreach ($i in $Hosts)  
    { 
        Do-Stuff $i
    }
    

    Then call it like:

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

    Notice the comma between the values. This collects them in an array

    0 讨论(0)
提交回复
热议问题