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

25

我正在编写一个PowerShell脚本,以获取30天内即将过期的证书列表。脚本是可行的,但问题在于有太多的应用程序和Pres服务器,并且我想最小化脚本代码。我的函数如下:

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这样传递计算机名称,并且服务器数量可以根据菜单选项选择的不同而变化,范围从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

Invoke-command可以将计算机名称的数组作为参数传递。 - js2010
2个回答

34

试试这个:

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}}
            }
        }
    }
}

1
能否像这样在变量$ComputerNames="adf","fdf","sdffd","adsfad",adsfasf"中传递值? - Ashish-BeJovial

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接