2014-03-26 7 views
7

Ich schreibe Powershell-Skript, um eine Liste von Zertifikaten zu erhalten, die innerhalb von 30 Tagen abgelaufen sind. Das Skript funktioniert, aber das Problem ist, dass es zu viele App- und Pres-Server gibt und ich den Script-Code minimieren möchte. Meine Funktion ist:Wie übergeben Array oder Liste als Parameter in Powershell-Funktion?

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

und ich rufe diese Funktion wie:

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

Was ich will, ist: Ich möchte ComputerNames wie serv1, SERV2, SERV3 und diese Anzahl von Servern cound passieren variieren von 1 bis 6, abhängig von der gewählten Option im Menü. OR Kann ich eine Liste von Servern verschiedener Umgebungen definieren und den Listennamen als Parameter übergeben und meine CheckCert-Funktion so ändern, dass sie für jeden Server durchlaufen wird und die abgelaufenen Zertifikatsdetails erhält ???

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

und es Server-Listen sind ungefähr wie:

CIT_envList = serv1, SERV2

SIT_envList = serv1, SERV2, SERV3,

PROD_envList = serv1, SERV2, SERV3, serv4

Antwort

9

versuchen Sie dies:

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