Você pode usar o recurso New-WebBinding: link
por exemplo,
IIS:\>New-WebBinding -Name "Default Web Site" -IPAddress "*" -Port 80 -HostHeader TestSite
Estou tentando controlar as ligações em um aplicativo do IIS usando o powershell. Gostaria de criar um site com uma ligação http e https usando um script.
Isso é o que eu tenho até agora:
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
Como adiciono ligações à minha variável $bindings
/ use algum outro mecanismo para atingir meu objetivo?
Você pode usar o recurso New-WebBinding: link
por exemplo,
IIS:\>New-WebBinding -Name "Default Web Site" -IPAddress "*" -Port 80 -HostHeader TestSite
Eu passei pelo processo de tentar adicionar uma ligação https a um site e isso pode ser muito doloroso. Há muitas maneiras de realizar cada etapa e cada uma delas tem armadilhas. Estou deixando para trás a solução final, esperando que alguém ache útil.
Esta solução pressupõe que você tenha o IIS instalado e um site definido. Chame o site sample.contoso.com para os fins desta postagem. Suponha que você tenha um certificado em um arquivo sample.contoso.com.pfx que deseja usar também.
O primeiro passo é importar o certificado do arquivo.
$certPwd = ConvertTo-SecureString -String "password" -Force -AsPlainText
$webServerCert = Import-PfxCertificate -FilePath c:\some\folder\sample.contoso.com.pfx -CertStoreLocation Cert:\LocalMachine\My -Password $certPwd
Seria bom se isso fosse suficiente. E em alguns casos pode ser. No entanto, para mim, isso deixou o certificado sem acesso adequado à chave privada. Isso causou um erro PowerShell "Uma sessão de logon especificado não existe. Ele já pode ter sido finalizado" quando fui adicionar o certificado à ligação (consulte essa etapa mais tarde). Então, o próximo passo é consertar a ACL para a chave privada.
$privateKeyFilename = $webServerCert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
$privateKeyFullPath = "c:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\"+$privateKeyFilename
$aclRule = "SYSTEM", "Full", "Allow"
$aclEntry = New-Object System.Security.AccessControl.FileSystemAccessRule $aclRule
$privateKeyAcl = (Get-Item $privateKeyFullPath).GetAccessControl("Access")
$privateKeyAcl.AddAccessRule($aclEntry)
Set-Acl $privateKeyFullPath $privateKeyAcl
Isso permitirá que o sistema local tenha acesso total à chave privada, se isso não for herdado da pasta que o contém.
Se você quiser obter um certificado já instalado, precisará do hash dele e recuperá-lo com Get-Item assim:
$webServerCert = get-item Cert:\LocalMachine\My\XFX2DX02779XFD1F6F4X8435A5X26ED2X8DEFX95
O próximo passo é criar a ligação.
New-WebBinding -Name sample.contoso.com -IPAddress * -Port 443 -Protocol "https"
É importante notar que "https" é sensível a maiúsculas e minúsculas. Se você usar "HTTPS", receberá um resultado de ligação realmente diferente.
Essa ligação ainda não tem um certificado anexado a ela, portanto, a última etapa é anexar o certificado. Se o certificado for confiável e a segurança estiver correta, essa etapa deverá ser bem-sucedida. Pode ser complicado se houver algum problema com o certificado.
$bind = Get-WebBinding -Name $webSiteDNSName -Protocol https
$bind.AddSslCertificate($webServerCert.GetCertHashString(), "my")
Se isso falhar com uma mensagem sobre uma sessão de logon não existe, o certificado pode ter algum problema. Revise o visualizador de eventos para mais detalhes. Durante meus esforços, encontrei o evento 5061 no log de segurança. Quando falhou, mostrou que o OpenKey falhou com 80090016 (o conjunto de chaves não existe). E a falha ocorreu porque o SYSTEM não tinha acesso à chave privada.
Isso foi suficiente para eu criar a ligação https. A ligação http foi um subproduto do uso do cmdlet New-WebSite. Se ele não vier de graça, não acho que criar a ligação da porta 80 com o cmdlet New-WebBinding seja um desafio.
Acho que o que você está procurando é o seguinte:
$bindings = @(
@{protocol="http";bindingInformation=$ip + ":"+ $port + ":" + $hostRecord},
@{protocol="https";bindingInformation=$ip + ":"+ $port + ":" + $hostRecord}
)
Basicamente você precisa passar uma matriz de ligações. Mais informações úteis aqui - ( link )
(Editar: erro de digitação fixo na sintaxe da matriz - vírgula estranha)
Tags powershell