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
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}}
}
}
}
}
En travaillant avec PS 4.0 ou version ultérieure, il est également possible de définir comme CheckCert([array]$ComputerNames)
.