繁体   English   中英

PSCustomObjects数组作为输入参数

[英]Array of PSCustomObjects as input parameter

最近,我陷入了提供数组数组作为PS脚本输入参数的问题。

我有两个脚本。 一种是启动和管理进程,第二种是在作为输入参数提供的计算机上执行某些操作。

通过-Computer参数提交一台PC时,它成功运行

[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

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

最终,我找到了对我有用的解决方案。 我将作为PSCustomObjects数组的$ Package转换为如下字符串:

@([pscustomobject] @ {Hostname =“”; Param1 =; Param2 =},...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM