web-dev-qa-db-fra.com

Comment passer un tableau ou une liste en tant que paramètre à une fonction PowerShell?

J'écris un script PowerShell pour obtenir une liste des certificats qui expirent dans les 30 jours. Le script fonctionne, mais le problème est qu'il y a trop de serveurs d'applications et de pres, et je veux minimiser le code du script. Ma fonction est:

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

Et j'appelle cette fonction comme:

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

Je veux passer des noms d'ordinateur comme serv1, serv2, serv3 et ce nombre de serveurs varie de 1 à 6 selon l'option sélectionnée dans le menu. ** O Puis-je définir une liste de serveurs de différents environnements et passer le nom de la liste comme paramètre et modifier ma fonction CheckCert pour parcourir chaque serveur et obtenir les détails du certificat expiré?

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

Et leurs listes de serveurs sont quelque chose comme:

CIT_envList = serv1, serv2

SIT_envList = serv1, serv2, serv3,

PROD_envList = serv1, serv2, serv3, serv4
15
nectar

Essaye ça:

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}}
            }
        }
    }
}
14
CB.

En travaillant avec PS 4.0 ou version ultérieure, il est également possible de définir comme CheckCert([array]$ComputerNames).

1
Luiz Eduardo Garcia