Próbuję kontrolować powiązania w aplikacji IIS za pomocą programu PowerShell. Chciałbym utworzyć witrynę z powiązaniem http i https za pomocą skryptu.
Oto co mam do tej pory:
Param(
[Parameter(Mandatory=$True,Position=1)]
[string]$hostname,
[Parameter(Mandatory=$True,Position=2)]
[string]$installPath,
[Parameter(Mandatory=$False,Position=3)]
[string]$ip
)
Import-Module WebAdministration
$appPoolName = $hostname + 'Pool'
$port = 80
$hostRecord = $hostname+'.example.com'
$bindings = @{protocol="http";bindingInformation=$ip + ":"+ $port + ":" + $hostRecord}
New-Item IIS:\AppPools\$appPoolName
Set-ItemProperty IIS:\AppPools\$appPoolName managedRuntimeVersion v4.0
New-Item IIS:\Sites\$hostname -Bindings $bindings -PhysicalPath $installPath
Set-ItemProperty IIS:\Sites\$hostname -Name applicationPool -Value $appPoolName
Jak dodać powiązania do mojej $bindings
zmiennej / użyć innego mechanizmu, aby osiągnąć swój cel?
powershell
Khanzor
źródło
źródło
Przeszedłem przez proces dodawania powiązania https do witryny i może to być dość bolesne. Istnieje wiele sposobów na osiągnięcie każdego kroku i każdy z nich ma pułapki. Zostawiam ostatnie rozwiązanie, mając nadzieję, że ktoś uzna je za przydatne.
To rozwiązanie zakłada, że masz zainstalowane IIS i zdefiniowano witrynę internetową. Zadzwoń na stronę sample.contoso.com do celów tego postu. Załóżmy, że masz certyfikat w pliku sample.contoso.com.pfx, którego również chcesz użyć.
Pierwszym krokiem jest zaimportowanie certyfikatu z pliku.
Byłoby miło, gdyby to wystarczyło. A w niektórych przypadkach może tak być. Jednak dla mnie pozostawiło to certyfikat bez odpowiedniego dostępu do klucza prywatnego. Spowodowało to błąd PowerShell „Określona sesja logowania nie istnieje. Być może została już zakończona”, gdy poszedłem dodać certyfikat do powiązania (zobacz ten krok później). Kolejnym krokiem jest naprawa listy ACL dla klucza prywatnego.
Umożliwi to systemowi lokalnemu pełny dostęp do klucza prywatnego, jeśli nie zostanie on odziedziczony z folderu zawierającego.
Jeśli chcesz uzyskać certyfikat, który jest już zainstalowany, potrzebujesz do niego skrótu i możesz go pobrać za pomocą Get-Item:
Następnym krokiem jest utworzenie powiązania.
Należy zauważyć, że w „https” rozróżniana jest wielkość liter. Jeśli zamiast tego użyjesz „HTTPS”, otrzymasz naprawdę inny wynik wiązania.
Wiązanie to nie ma jeszcze dołączonego certyfikatu, więc ostatnim krokiem jest dołączenie certyfikatu. Jeśli certyfikat jest poprawnie zaufany, a bezpieczeństwo jest prawidłowe, ten krok powinien zakończyć się powodzeniem. Może to być trudne, jeśli wystąpią jakiekolwiek problemy z certyfikatem.
Jeśli to się nie powiedzie, komunikat o sesji logowania nie istnieje, może to oznaczać problem z certyfikatem. Przejrzyj przeglądarkę zdarzeń, aby uzyskać więcej informacji. Podczas moich wysiłków znalazłem zdarzenie 5061 w dzienniku bezpieczeństwa. Gdy zawiodło, pokazało, że OpenKey zawiódł z 80090016 (zestaw kluczy nie istnieje). A błąd polegał na tym, że SYSTEM nie miał dostępu do klucza prywatnego.
To wystarczyło mi, aby utworzyć powiązanie https. Powiązanie http było produktem ubocznym użycia polecenia cmdlet New-WebSite. Jeśli nie przyjdzie za darmo, tworzenie powiązania portu 80 za pomocą polecenia cmdlet New-WebBinding nie jest wyzwaniem.
źródło
Myślę, że to, czego szukasz, to:
Zasadniczo musisz przekazać tablicę powiązań. Więcej przydatnych informacji tutaj - ( http://blogs.iis.net/jeonghwan/iis-powershell-user-guide-guide-comparing-representative-iis-ui-tasks )
(Edycja: Naprawiono literówkę w składni tablic - dodatkowy przecinek)
źródło