Как экспортировать данные об истечении срока действия SSL-сертификата в лист Excel с помощью скрипта Powershell - PullRequest
0 голосов
/ 21 января 2020

Я написал код, в котором он будет экспортировать все детали сертификата SSL на лист Excel с использованием скрипта Powershell, но в выводе windows мне нужны детали, включая имя сервера, как показано ниже:

код


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

Invoke-Command -ComputerName AAA, BBB { Dir Cert:\LocalMachine\My } | foreach { 
  If ($_.NotAfter -le $deadline) { $_ | Select Issuer, Subject, ServerName, NotAfter, @{Label="Expires In (Days)";Expression={($_.NotAfter - (Get-Date)).Days}} } 
} | Export-Csv -Path C:\users\$env:username\desktop\Multiplecert_results.csv -NoTypeInformation -Force```

**Output**
*Issuer            : CN=MS-Organization-P2P-Access [2019]
Subject           : CN=742833b2-8a94-400a-8bbc-ded50dfd3f1a, 
                    DC=8d894c2b-238f-490b-8dd1-d93898c5bf83
ServerName        : 
NotAfter          : 1/21/2020 10:03:43 PM
Expires In (Days) : 0*

I need the Server name details in the above output when i run the Script which i wrote.

Thanks in Advance.

1 Ответ

0 голосов
/ 21 января 2020

Просто используйте $ env: COMPUTERNAME в своем коде. Нет необходимости в этом l oop, как вы можете сделать это в Invoke. Вы можете упростить это, просто сделав это ...

Invoke-Command -ComputerName 'aaa', 'bbb' { 
    Get-ChildItem -Path 'Cert:\LocalMachine\My' | 
    Select-Object -Property Issuer, Subject, 
}

# Results
Issuer         : ...
Subject        : ...
PSComputerName : ...
RunspaceId     : ...

Придерживаясь, что $ env in дважды выдаст вам имя

Invoke-Command -ComputerName 'aaa', 'bbb' { 
    Get-ChildItem -Path 'Cert:\LocalMachine\My' | 
    Select-Object -Property Issuer, Subject, 
    @{Label = 'ServerName';Expression = {$env:COMPUTERNAME}}
}

# Results
Issuer         : ...
Subject        : ...
ServerName     : ...
PSComputerName : ...
RunspaceId     : ...

Что касается этого ...

"Я пытался таким образом, но код не работает"

Что это значит, поскольку вы не говорите / не показываете, что не работает? Кроме того, когда вам нужно показать код, всегда обновляйте исходное сообщение, а не помещайте его в раздел комментариев.

$threshold = 300 #Number of days to look for expiring certificates 
$deadline = (Get-Date).AddDays($threshold) #Set deadline date 

Опять же, не делайте этого ...

Invoke-Command -ComputerName 'AAA', 'BBB' | 
foreach { 
Get-ChildItem -Path 'Cert:\LocalMachine\My' | 
    Select-Object -Property Issuer, Subject 
    @{Label = 'ServerName';Expression = {$env:COMPUTERNAME}}, 
    @{Label='Expires In (Days)';Expression = {($_.NotAfter - (Get-Date)).Days}} 
}

... потому что вы запрашиваете данные (которые ForEach) вне вызова на удаленный сервер.

Сделайте это .. .

Invoke-Command -ComputerName 'aaa', 'bbb' { 
    Get-ChildItem -Path 'Cert:\LocalMachine\My' | 
    Select-Object -Property Issuer, Subject 
    @{Label = 'ServerName';Expression = {$env:COMPUTERNAME}}, 
    @{Label='Expires In (Days)';Expression = {($_.NotAfter - (Get-Date)).Days}} 
}

Что касается ...

Последнее сомнение в моем сценарии У меня есть ярлык, чтобы получить срок действия в днях, как я могу включите его в свой сценарий, чтобы получить срок действия

... срок действия сертификата - это обычная и хорошо документированная вещь в течение многих лет. В этом сроке действия вы используете неправильный оператор.

См. Эту статью: Использование PowerShell для поиска сертификатов, срок действия которых истекает

Get-ChildItem -Path cert: -Recurse -ExpiringInDays 75

Или

Get-ChildItem -Recurse | 
where { $_.notafter -le (get-date).AddDays(75) } | 
select thumbprint, subject

Итак, ваш код такой

Invoke-Command -ComputerName 'aaa', 'bbb' { 
    Get-ChildItem -Path 'Cert:\LocalMachine\My' | 
    Select-Object -Property Issuer, Subject 
    @{Label = 'ServerName';Expression = {$env:COMPUTERNAME}}, 
    @{Label='Expires In (Days)';Expression = {$_.notafter -le (get-date).AddDays($threshold)}} 
}

Что касается этого ...

Когда я попробовал приведенный выше сценарий, который вы предложили для истечения срока действия В первые дни

... попробуйте это так.

Clear-Host

Invoke-Command -ComputerName 'aaa', 'bbb' { 
    Get-ChildItem -Path 'Cert:\LocalMachine\My' -Recurse | 
    Select-Object -Property Issuer, Subject, NotAfter, 
    @{Label = 'ServerName';Expression = {$env:COMPUTERNAME}}, 
    @{Label='Expires In (Days)';Expression = {(New-TimeSpan -Start (Get-Date) -End $PSitem.NotAfter).Days}} 
}

# Results

...

Issuer            : CN=M...
Subject           : CN=M...
NotAfter          : 5/9/2021 7:28:13 PM
ServerName        : aaa
Expires In (Days) : 474
PSComputerName    : aaa
RunspaceId        : 9...

Issuer            : CN=Th...
Subject           : CN=Th...
NotAfter          : 12/31/2020 6:59:59 PM
ServerName        : aaa
Expires In (Days) : 344
PSComputerName    : aaa
RunspaceId        : 9...
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...