You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell更新IIS多站点的不同SSL绑定证书?

解决IIS站点指定绑定更新证书的问题

精准更新单个绑定的证书

你之前的脚本会更新所有绑定,核心原因是没有精准筛选目标绑定。可以通过Get-WebBinding结合条件过滤,定位到具体的绑定后再更新证书,避免误操作其他绑定。

示例脚本:

# 配置目标参数
$siteName = "你的站点名称"
$bindingProtocol = "https"
$bindingHostHeader = "example.com" # 无主机头绑定留空或设为$null
$bindingPort = 443
$newCertThumbprint = "新证书的指纹(可从证书管理器中复制)"

# 筛选目标绑定
$targetBinding = Get-WebBinding -Name $siteName -Protocol $bindingProtocol | Where-Object {
    # 根据实际绑定类型调整筛选条件
    $_.HostHeader -eq $bindingHostHeader -and $_.Port -eq $bindingPort
}

# 执行证书更新
if ($targetBinding) {
    # "My" 代表证书存储位置为当前用户的个人存储区,若证书在本地计算机存储区则用 "LocalMachine"
    $targetBinding.AddSslCertificate($newCertThumbprint, "My")
    Write-Host "已成功更新站点 [$siteName] 中 [$bindingHostHeader:$bindingPort] 的证书"
} else {
    Write-Warning "未找到站点 [$siteName] 中匹配的绑定,请检查参数是否正确"
}

如果是无主机头的IP绑定,修改筛选条件为:

$targetBinding = Get-WebBinding -Name $siteName -Protocol $bindingProtocol | Where-Object {
    $_.IPAddress -eq "192.168.1.100" -and $_.Port -eq $bindingPort -and [string]::IsNullOrEmpty($_.HostHeader)
}

解决set-WebBinding "目标配置对象未找到" 警告

这个警告通常是参数不匹配导致的,排查方向:

  • 站点名称区分大小写,必须与IIS管理器中显示的完全一致
  • 检查绑定的协议、端口、主机头/IP是否和实际配置一致(比如有些https绑定可能没设主机头,只用IP+端口)
  • 若绑定使用了通配符证书或SNI,确保筛选条件覆盖这些场景

多服务器批量处理方案

如果需要同步更新多台IIS服务器的绑定证书,可结合Invoke-Command远程执行脚本:

# 定义目标服务器列表
$servers = @("Server01", "Server02", "Server03")

# 定义所有需要更新的绑定配置
$bindingConfigs = @(
    @{
        SiteName = "SiteA"
        Protocol = "https"
        HostHeader = "a.example.com"
        Port = 443
        CertThumbprint = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
        CertStore = "My" # 证书存储位置
    },
    @{
        SiteName = "SiteB"
        Protocol = "https"
        IPAddress = "192.168.1.200"
        Port = 443
        CertThumbprint = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"
        CertStore = "LocalMachine"
    }
)

# 远程执行更新逻辑
Invoke-Command -ComputerName $servers -ScriptBlock {
    param($configs)
    foreach ($config in $configs) {
        # 根据配置类型筛选绑定
        $filterScript = if ($config.HostHeader) {
            { $_.HostHeader -eq $config.HostHeader -and $_.Port -eq $config.Port }
        } else {
            { $_.IPAddress -eq $config.IPAddress -and $_.Port -eq $config.Port -and [string]::IsNullOrEmpty($_.HostHeader) }
        }

        $targetBinding = Get-WebBinding -Name $config.SiteName -Protocol $config.Protocol | Where-Object $filterScript

        if ($targetBinding) {
            $targetBinding.AddSslCertificate($config.CertThumbprint, $config.CertStore)
            Write-Host "[$env:COMPUTERNAME] 已完成站点 [$($config.SiteName)] 的绑定更新"
        } else {
            Write-Warning "[$env:COMPUTERNAME] 未找到站点 [$($config.SiteName)] 的匹配绑定"
        }
    }
} -ArgumentList @($bindingConfigs)

注意:执行远程脚本需要目标服务器开启WinRM服务,且当前用户拥有目标服务器的管理员权限。

内容的提问来源于stack exchange,提问作者andry79

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 01:15:05