Я пытаюсь собрать воедино некоторый код PowerShell, чтобы пройтись по списку серверов, вернуть некоторую информацию, касающуюся их сайтов и привязок IIS, и, если у них есть привязка https, получить certificateHash и использовать, чтобы найти сертификат по отпечатку пальца и верните дату истечения срока действия.
Проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю свой код ниже $ binding.cerficateHash, кажется, возвращает то, что я ожидал, строку сертификата Hash, но когда я использую это свойство certificateHash, чтобы попытаться получить сертификат его отпечаток большого пальца, это не работает ... но когда я беру необработанное строковое значение значения certificateHash и жестко его кодирую, оно работает ...
Я проверил CertificateHash.GetType (), и он, кажется, просто строка, поэтому я не понимаю, что я делаю не так, и я пробовал несколько вещей, но безрезультатно, учитывая, что это мой первый взлом на PowerShell, так что есть много, я не знаю.
$sites = Invoke-Command -ComputerName $serverName { Import-Module WebAdministration; Get-ChildItem -path IIS:\Sites } -ErrorAction SilentlyContinue
foreach($site in $sites)
{
$serverName
$site.name
$site.physicalPath
foreach($binding in $site.bindings.Collection)
{
$binding.protocol
$binding.bindingInformation
$binding.certificateHash
$binding.certificateStoreName
if($binding.certificateHash)
{
# This outputs AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
$binding.certificateHash
# this retrieves a cert and returns its expiration date, Woohooo!
Start-Job Invoke-Command -ComputerName $serverName -ScriptBlock { (Get-ChildItem -path Cert:\LocalMachine\WebHosting | Where-Object {$_.Thumbprint -eq "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" })[0].GetExpirationDateString() }
# this does not find a cert, and ive tried many things, and no dice.
Start-Job Invoke-Command -ComputerName $serverName -ScriptBlock { (Get-ChildItem -path Cert:\LocalMachine\WebHosting | Where-Object {$_.Thumbprint -eq $binding.certificateHash })[0].GetExpirationDateString() }
# i've tried extracting the hash via "tostring" and using that, no dice
$hash = $binding.certificateHash.ToString()
Start-Job Invoke-Command -ComputerName $serverName -ScriptBlock { (Get-ChildItem -path Cert:\LocalMachine\WebHosting | Where-Object {$_.Thumbprint -eq $hash })[0].GetExpirationDateString() }
# i've tried adding some wildcards and using the -like operator, no dice.
$hash = "*" + $binding.certificateHash + "*"
Start-Job Invoke-Command -ComputerName $serverName -ScriptBlock { (Get-ChildItem -path Cert:\LocalMachine\WebHosting | Where-Object {$_.Thumbprint -lilke $hash })[0].GetExpirationDateString() }
}
}
}
Пример вывода для сайта.
- Site1
- D: \ Apps \ site1
- HTTP
- *: 80: Site1-test.ourdomain.com
- 1019 * HTTPS *
- *: 443: Site1-test.ourdomain.com
- АААААААААААААААААААААААААААААААААААААААА
- WebHosting