PSCustomObjects数组作为输入参数

时间:2015-07-13 09:03:00

标签: arrays powershell parameter-passing

最近我遇到了提供数组数组作为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

如何将这样的数组传递给脚本?

1 个答案:

答案 0 :(得分:0)

最后,我找到了适合我的解决方案。 我将$ Package(PSCustomObjects数组)转换为字符串,如:

@([pscustomobject] @ {主机名= “”;参数1 =;参数2 =},...)