最近我遇到了提供数组数组作为PS脚本输入参数的问题。
我有两个脚本。一种是启动和管理流程,第二种是在作为输入参数提供的计算机上执行某些操作。
当我通过-Computer
参数
[Parameter(Mandatory=$False,
ParameterSetName="input1",
HelpMessage="Privide single computer name")]
[alias("host","workstation")]
[string]$Computer=$env:COMPUTERNAME,
或超过-InputFile
参数
[Parameter(Mandatory=$True,
ParameterSetName="input3",
HelpMessage="Privide full path to input file which contains list of hosts")]
[ValidatePattern("^.*\.(TXT|txt|CSV|csv)")]
[alias("file","input")]
[string]$InputFile,
但是,当我想提交数组时,我有另一个输入参数。参数名称为-Computers
:
[Parameter(Mandatory=$True,
ParameterSetName="input2",
HelpMessage="Privide array of computers")]
[alias("hosts","workstations")]
[string[]]$Computers,
在我启动进程并管理它们的第一个脚本中,我使用以下命令:
#Define arguments for executable
$PSArguments = $null
$PSArguments += "-WindowStyle Normal "
$PSArguments += "-Command `"$Script_DPNE "
$PSArguments += "-Computers $Package`""
#Prepare process
$Process = New-Object System.Diagnostics.Process
$Process.StartInfo.UseShellExecute = $False
$Process.StartInfo.WindowStyle = "Hidden"
$Process.StartInfo.CreateNoWindow = $True
$Process.StartInfo.FileName = $Executable
$Process.StartInfo.Arguments = $PSArguments
#Start process
$Process.Start() | Out-Null
不幸的是,$package
不是一个数组。
$Package
具有以下结构:
Hostname param1 param2
-------- ------ ------
host1 1 1
host2 0 1
host3 1 1
host4 1 0
等。
param1和param2只能包含0或1
如何将这样的数组传递给脚本?
答案 0 :(得分:0)
最后,我找到了适合我的解决方案。 我将$ Package(PSCustomObjects数组)转换为字符串,如:
@([pscustomobject] @ {主机名= “”;参数1 =;参数2 =},...)