Как экспортировать детали сертификата, относящиеся к конкретному сайту IIS, используя скрипт Powershell - PullRequest
1 голос
/ 05 февраля 2020

Я написал скрипт, в котором он будет экспортировать все данные сертификата SSL с моего компьютера на лист Excel, но мне нужно экспортировать сертификаты, которые сопоставлены с конкретным сайтом в IIS, а затем мне нужно экспортировать эти данные с Название сайта и данные сертификата на листе Excel.

Код

#Clearing the Console host in PS
Clear-Host

#Installing the Excel module to the Powershell
Install-Module -Name ImportExcel

#List of Servers
$computers = Get-Content "C:\TEMP\servers.txt" 

#Number of days to look for expiring certificates
$threshold = 300    

#Set deadline date
$deadline = (Get-Date).AddDays($threshold) 

Invoke-Command -ComputerName $computers { 
    Get-ChildItem -Path 'Cert:\LocalMachine\My' -Recurse |
    Select-Object -Property @{n='ServerName';e={$env:COMPUTERNAME}},Issuer, Subject, NotAfter, 
    #@{Label = 'ServerName';Expression = {$env:COMPUTERNAME}}
    @{Label='Expires In (Days)';Expression = {(New-TimeSpan -Start (Get-Date) -End $PSitem.NotAfter).Days}} 
} | Export-Excel -Path C:\users\$env:username\documents\MultipleServer_Certificate_Expiry_Details.xlsx`

1 Ответ

2 голосов
/ 06 февраля 2020

Это очень распространенная вещь, со многими статьями и примерами по всему Интернету в этом случае использования IIS. Это то, для чего используется модуль веб-администрирования.

<# 
Get all IIS bindings and SSL certificates
On a local or remote IIS PowerShell Session
#>

Import-Module -Name WebAdministration

Get-ChildItem -Path IIS:SSLBindings | 
ForEach-Object -Process {
    if ($_.Sites)
    {
        $certificate = Get-ChildItem -Path CERT:LocalMachine/My |
            Where-Object -Property Thumbprint -EQ -Value $_.Thumbprint

        [PsCustomObject]@{
            Sites                        = $_.Sites.Value
            CertificateFriendlyName      = $certificate.FriendlyName
            CertificateDnsNameList       = $certificate.DnsNameList
            CertificateNotAfter          = $certificate.NotAfter
            CertificateIssuer            = $certificate.Issuer
        }
    }
}

Настройте вышеперечисленное в соответствии со своими потребностями.

Обратите внимание, если вы используете устаревшую версию PowerShell:

[PsCustomObject] @ {} не будет работать в PS 2.0, но вы можете заменить его на New-Object -TypeName PSObject

Update

Вы запросили образец сценария для работать на нескольких серверах. Тем не менее, у вас уже есть код в вашем посте. Просто поместите эту Invoke-Command в ForEach l oop и передайте список компьютеров.

$Computers |  
ForEach {
    Invoke-Command -ComputerName $PSItem -ScriptBlock { 
        Get-ChildItem -Path 'Cert:\LocalMachine\My' -Recurse |
        Select-Object -Property @{n='ServerName';e={$env:COMPUTERNAME}},Issuer, Subject, NotAfter, 
        @{Label='Expires In (Days)';Expression = {(New-TimeSpan -Start (Get-Date) -End $PSitem.NotAfter).Days}} 
    } | Export-Excel -Path "C:\users\$env:username\documents\MultipleServer_Certificate_Expiry_Details.xlsx"
}

Конечно, вам нужно добавить этот пример для блока Web Admin в ваш сертификат. Точки данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...