如何在PowerShell中动态填充用户输入中未知数量的变量?

时间:2018-05-10 18:34:45

标签: powershell

我试图弄清楚如何根据用户输入填充未知数量的变量(编写从CA获取证书的脚本,有时这些证书包含多个名称(SAN),并且无法知道这需要多少动态)。

我知道我开始设置这样的参数:

[CmdletBinding()]
Param(
[Parameter(Mandatory=$True)]
[string[]]$SANs
)

然后我需要以某种方式获取这些值并将它们分配给$san1, $san2, $san3,依此类推。

对编程不熟悉,我甚至不确定该怎么称呼它。你会用foreach循环以某种方式填充这些变量吗?

ForEach ($SAN in $SANs) {

我在这做什么?

}

最终结果是需要使用dns=$san1&dns=$san2&dns=$san3等... {/ p>这些变量填充字符串

1 个答案:

答案 0 :(得分:4)

函数和脚本可以使用参数。示例中的参数块看起来像......

function foo {
    Param([string[]]$SANs)
}

该参数$ SANs是一个字符串数组。单个字符串看起来像这样......

$stuff = 'barf'

字符串数组看起来像这样......

$stuff = @('barf', 'toot', 'ruff', 'meow')

到目前为止一切顺利?如果您需要获取数组中的每个内容,您将使用循环...

foreach ($thing in $stuff) { write-output $thing }

...例如......

$san_declaration

foreach ($thing in $stuff) {
  if ($san_declaration.length -eq 0) {
    $san_declaration = "dns=${thing}"
  } else {
    $san_declaration += "&dns=${thing}"
  }
}

现在,如果您(不是您提出的问题)碰巧正在调用Get-Certificate,请记住SANs参数是一个字符串数组。在这种情况下,你只需要传入字符串数组,而不是像你一样创建字符串。

Get-Certificate -DnsName $stuff