从Powershell中的Get-WebBinding获取字符串格式的IIS IP地址

Dom*_*tti 3 iis powershell

我正在尝试通过ID(与名称)检索我引用的网站的IP地址。我能弄清楚的最好方法是在“ bindingInformation”属性上使用正则表达式,如下所示:

$siteID = "22"
$website = Get-Website | Where { $_.ID -eq $siteID }
$iP = Get-WebBinding $website.name | Where { $_.bindingInformation -match "/[^:]*/" }
Run Code Online (Sandbox Code Playgroud)

但是,它似乎没有填充$ iP变量吗?

当我逐步执行时,得到以下信息:

PS IIS:\sites> Get-WebBinding $website.name

protocol  bindingInformation                                                                        
-------- ------------------                                                                        
http      10.206.138.131:80:                                                                        
http      10.206.138.131:80:dev1.RESERVED22                                                         
http      10.206.138.131:80:dev1.www.RESERVED22 
Run Code Online (Sandbox Code Playgroud)

我猜我不确定如何将$ _。bindingInformation转换为字符串格式变量?对于Powershell来说还很陌生,如果这看起来很简单,请抱歉。在此示例中,我需要将$ IP变量设置为“ 10.206.138.131” ...谢谢您的帮助。

Mat*_*sen 6

您可以Select-Object -ExpandProperty bindingInformation用来获取bindingInformation属性值:

PS C:\> Get-WebBinding "sitename" |Select-Object -ExpandProperty bindingInformation
10.206.138.131:80:
10.206.138.131:80:dev1.RESERVED22
10.206.138.131:80:dev1.www.RESERVED22
Run Code Online (Sandbox Code Playgroud)

现在,由于每个绑定字符串都采用以下形式:

[IP]:[Port]:[Hostname]
Run Code Online (Sandbox Code Playgroud)

我们可以使用-split运算符将其拆分为3,然后仅抓取第一个:

PS C:\> $Bindings = Get-WebBinding "sitename" |Select-Object -ExpandProperty bindingInformation
PS C:\> $Bindings | ForEach-Object { @($_ -split ':')[0] }
10.206.138.131
10.206.138.131
10.206.138.131
Run Code Online (Sandbox Code Playgroud)

最后,您可以使用Sort-Object -Unique删除所有重复项:

PS C:\> $Bindings = Get-WebBinding "sitename" |Select-Object -ExpandProperty bindingInformation
PS C:\> $IPs = $Bindings | ForEach-Object { @($_ -split ':')[0] }
PS C:\> $IPs = @($IPs |Sort-Object -Unique)
Run Code Online (Sandbox Code Playgroud)

$IPs现在变量是包含所有用于绑定的特定IP地址,你的情况只是一个单一的一个阵列:

PS C:\> $IPs
10.206.138.131
Run Code Online (Sandbox Code Playgroud)