Я пытаюсь автоматизировать обновление сертификатов в IIS через powershell, и все идет нормально, за исключением того, что скрипт не перезапишет существующий сертификат, не удалив его сначала. Я хочу сделать это изящно. Вот строка, которая вызывает проблему, есть идеи?
New-Item "IIS:\SslBindings\*!${Port}!${HostName}" -Thumbprint
$NewCertThumbprint -SslFlags 1
И вот ошибка:
New-Item : Cannot create a file when that file already exists
At C:\Scripts\SSL_Check.ps1:20 (the line above) char:13
+ New-Item "IIS:\SslBindings\*!${Port}!${HostName}" -Thumbprint $NewCe ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [New-Item], Win32Exception
+ FullyQualifiedErrorId : System.ComponentModel.Win32Exception,Microsoft.PowerShell.Commands.NewItemCommand
(Я использовал запросы отпечатков пальцев в качестве переменных, чтобы различать старые и новые сертификаты).
Хммм, спасибо за это, теперь я получаю новую ошибку: «Копировать элемент: не может быть найден параметр, который соответствует имени параметра« Отпечаток »».
$ CurrentCert = "E6760F37773D17FC5F3DDA192B5B82D738BCC3BE" $ NewCert = "5F1C6318A7614DDEDAEFE6C81963426DD4611FDD" Если (обновление $ CurrentCert -eq $ binding - это привязка NewCert), Thumbchaprints сертификата хоста {Write-Host "разные. Copy-Item "IIS: \ SslBindings *! $ {Port}! $ {HostName}" -Thumbprint $ NewCert -SslFlags 1 IISReset}
не уверен, как сделать так, чтобы это выглядело опрятнее в комментариях.
Если вам нужно это сделать, просто отредактируйте исходный пост. В любом случае, я бы заранее использовал Remove-Item, но также проверял этот предыдущий вопрос: stackoverflow.com/questions/22765648/…
Глубоко внутри Windows использует HTTP API для связывания сертификатов с их привязками, docs.microsoft.com/en-us/windows/desktop/http/show-sslcert Таким образом, вам нужно удалить сопоставление со старым сертификатом и добавить новое сопоставление с новым. Я думаю, поэтому ваш текущий скрипт (он должен использовать тот же базовый HTTP API) не может его перезаписать.
Да, я закончил тем, что сделал это, но это отстой, без изящного обновления сертификата :(





Я бы сначала протестировал, но что-то вроде этого должно работать на основе: iis-7-and-the-webadministration-snapin
Это должно вызвать замену элемента:
New-Item -Path "IIS: \ Sites" -Name $ HostName -Type Site -Bindings @ {protocol = "https"; bindingInformation = "*: $ Port:"; thumbprint = $ NewCertThumbprint} -force
или вы можете сделать то же самое, используя элемент набора, чтобы изменить то, что уже есть
Set-Item -Path "IIS: \ Sites" -Name $ HostName -Type Site -Bindings @ {protocol = "https"; bindingInformation = "*: $ Port:"; thumbprint = $ NewCertThumbprint} -force
Исходя из вашего исходного сообщения, вы сможете просто добавить силы в его конец:
Новый элемент "IIS: \ SslBindings *! $ {Port}! $ {HostName}" -Thumbprint $ NewCertThumbprint -SslFlags 1 -force
Copy-Item перезаписывается по умолчанию