Просто используйте $ 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...
...