我试图弄清楚如何根据用户输入填充未知数量的变量(编写从CA获取证书的脚本,有时这些证书包含多个名称(SAN),并且无法知道这需要多少动态)。
我知道我开始设置这样的参数:
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True)]
[string[]]$SANs
)
然后我需要以某种方式获取这些值并将它们分配给$san1, $san2, $san3
,依此类推。
对编程不熟悉,我甚至不确定该怎么称呼它。你会用foreach
循环以某种方式填充这些变量吗?
ForEach ($SAN in $SANs) {
我在这做什么?
}
最终结果是需要使用dns=$san1&dns=$san2&dns=$san3
等... {/ p>这些变量填充字符串
答案 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