Я использую скрипт для удаленного получения сертификатов с серверов, который отлично справляется со своей задачей. Но мне не удается заставить его отображать один сертификат в одной строке.
$Servers = "srv01-corp-srv-name"
$Results = @()
$Results = Invoke-Command -cn $Servers {
$Certs = @{} | Select Certificate,Expired
$Cert = Get-ChildItem Cert:\LocalMachine\My <#| Where-Object {$_.subject -match [Environment]::GetEnvironmentVariable("computername")} #>
If($Cert){
$Certs.Certificate = $Cert.subject
$Certs.Expired = $Cert.NotAfter
}
Else{
$Certs.Certificate = " - "
$Certs.Expired = " - "
}
$Certs
} | Select-Object @{n='ServerName';e = {$_.pscomputername}},Certificate,Expired
#Display results in console
$Results | Sort-Object Expired -Descending
Вывод выглядит следующим образом:
ServerName Certificate Expired
srv01-corp-srv-name {CN=app.corp.com, CN=otherapp.corp.com, CN=last.corp.com} 2/21/2024 10:12:06 AM 2/26/2021 1:16:33 AM 11/6/2030 8:20:24 AM
Но я хотел бы получить такой результат:
ServerName Certificate Expired
srv01-corp-srv-name {CN=app.corp.com} 2/21/2024 10:12:06 AM
srv01-corp-srv-name {CN=otherapp.corp.com} 2/26/2021 1:16:33 AM
srv01-corp-srv-name {CN=last.corp.com} 11/6/2030 8:20:24 AM
Возможно ли, что дисплей отображается так? Заранее спасибо!





Не объединяйте все выходные данные Get-ChildItem cert:\... в один объект. Вместо этого используйте Select-Object, чтобы переименовать нужные свойства:
$Results = Invoke-Command -cn $Servers {
$Certs = Get-ChildItem Cert:\LocalMachine\My <#| Where-Object {$_.subject -match [Environment]::GetEnvironmentVariable("computername")} #>
if ($Certs){
$Certs
}
else {
# output a single empty dummy object
[pscustomobject]@{ Subject = ' - '; NotAfter = ' - '}
}
} | Select-Object @{n='ServerName';e = {$_.pscomputername}},@{Name='Certificate';Expression='Subject'},@{Name='Expired'; Expression='NotAfter'}
Еще одна вещь, где я могу использовать этот Get-Childitem -Path IIS:SslBindings, чтобы получить только сертификаты IIS, а не все сертификаты машины\сервера.