繁体   English   中英

如何将数组或列表作为参数传递给 PowerShell 函数?

[英]How do I pass an array or list as a parameter to a PowerShell function?

我正在编写一个 PowerShell 脚本来获取将在 30 天内过期的证书列表。 脚本正在运行,但问题是应用和预服务器太多,我想尽量减少脚本代码。 我的功能是:

function CheckCert($ComputerNames)
{
    $deadline = (Get-Date).AddDays($global:threshold) # Set deadline date
    Invoke-Command -ComputerName $ComputerNames { Dir Cert:\LocalMachine\My } |
        foreach {
            If ($_.NotAfter -le $deadline)
            {
                $_ | Select Issuer, Subject, NotAfter, @{Label="Expires In (Days)";Expression={($_.NotAfter - (Get-Date)).Days}}
            }
        }
}

我正在调用这个函数,如:

Switch ($xMenu1)
{
    1 {CheckCert -ComputerNames "CUKIRUNCSVR0242"}
    2 {CheckCert}
    3 {CheckCert}
    ...

我想传递像 serv1、serv2、serv3 这样的 ComputerNames,这个服务器数量从 1 到 6 不等,具体取决于从菜单中选择的选项。 **或我可以定义不同环境的服务器列表并将列表名称作为参数传递并修改我的 CheckCert 函数以遍历每个服务器并获取过期的证书详细信息吗?

Switch ($xMenu1)
{
    1 {CheckCert -ComputerNames CIT_envList}
    2 {CheckCert -ComputerNames SIT_envList}
    3 {CheckCert -ComputerNames Prod_envList}
    ...

他们的服务器列表类似于:

CIT_envList = serv1, serv2

SIT_envList = serv1, serv2, serv3,

PROD_envList = serv1, serv2, serv3, serv4

尝试这个:

function CheckCert([string[]]$ComputerNames)
{
    $deadline = (Get-Date).AddDays($global:threshold) # Set deadline date
    foreach ($computer in $ComputerNames)
    {
        Invoke-Command -ComputerName $Computer { Dir Cert:\LocalMachine\My } |
        foreach {
            If ($_.NotAfter -le $deadline)
            {
                $_ | Select Issuer, Subject, NotAfter, @{N="Expires In (Days)";E={($_.NotAfter - (Get-Date)).Days}}
            }
        }
    }
}

使用 PS 4.0 或更高版本,也可以定义为CheckCert([array]$ComputerNames)

暂无
暂无

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

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