0
最近我遇到了提供一个数组数组作为PS脚本输入参数的问题。PSCustomObjects数组作为输入参数
我有两个脚本。一种是启动和管理进程,另一种是在作为输入参数提供的计算机上执行某些操作。
它成功地工作时,我提出一个PC上-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
等。
参数1和参数只能包含0或1
如何传递这样的阵列到脚本?
嗯,什么命令你尝试运行?如果您尝试启动另一个Powershell脚本,则应该使用'&'运算符来运行脚本。否则,尝试通过命令行传递数组将会使它变成纯字符串,因为命令行处理不知道Powershell类型,数组等。 – Vesper
我试图运行另一个PowerShell脚本。生成的命令就像'powershell.exe -WindowStyle Normal -Command“E:\ secondscript.ps1 - 计算机<这里应该是一个数组>>”' – kade
另一件事是我更喜欢使用System.Diagnostics.Process类的原因稍后在我管理的脚本中启动了几个并行的进程。 然后,解决方案可以将该数组作为字符串像'@ {...}'一样传递,然后再转换回secondscript.ps1中的数组。 这是否有意义? – kade