PowerShell如何根据URL查询IIS绑定的虚拟应用名称
PowerShell按URL查询对应IIS虚拟应用名称的方法
之前的命令为什么拿不到结果
Get-Website -Name "url"这个命令的入参是站点的正式名称,根本不支持传入URL绑定值做模糊匹配,所以传URL进去肯定不会返回任何结果Get-WebBinding输出的字段只有绑定的协议、主机头、端口这类基础配置,对象本身没有关联虚拟应用的属性,查完自然拿不到应用名称
可直接落地的查询实现
先加载IIS自带的WebAdministration管理模块,顺着「URL绑定→所属站点→站点下所有虚拟应用路径匹配」的链路做追溯,完全适配绑定挂在子虚拟目录上的场景:
- 加载管理模块
Import-Module WebAdministration - 运行以下脚本,把脚本里的
$targetUrl替换成实际要查询的URL即可
# 替换成待查询的目标URL $targetUrl = "你的目标URL" $uri = [System.Uri]$targetUrl $bindKey = "{0}/{1}:{2}" -f $uri.Scheme, $uri.Host, $uri.Port # 匹配对应URL的绑定 $binding = Get-WebBinding | Where-Object { $_.bindingInformation -like "*$bindKey*" } if (-not $binding) { Write-Host "没找到这个URL对应的IIS绑定" exit } # 提取绑定所属的站点名 $siteName = $binding.ItemXPath -replace '.*name="([^"]+)".*','$1' # 遍历站点下所有虚拟应用,做最长路径匹配 $app = Get-WebApplication -Site $siteName | Where-Object { $uri.AbsolutePath.StartsWith($_.Path) } | Sort-Object { $_.Path.Length } -Descending | Select-Object -First 1 # 输出结果 if ($app) { Write-Host "对应虚拟应用名称:$($app.Name)" } else { Write-Host "这个URL没挂独立虚拟应用,直接归在站点根路径下" }
实操注意点
- 跑脚本必须用管理员权限打开PowerShell,不然读不到IIS的配置节点
- 脚本内置最长路径优先的匹配逻辑,哪怕URL是多级子目录挂载的虚拟应用,也能精准定位,不会出现之前查不到结果的情况
内容的提问来源于stack exchange,提问作者Adolf Ku
相关产品推荐
相关产品推荐

