我正在尝试通过ID(与名称)检索我引用的网站的IP地址。我能想到的最好方法是在“bindingInformation”属性上使用正则表达式,直到下面的第一个冒号...
$siteID = "22"
$website = Get-Website | Where { $_.ID -eq $siteID }
$iP = Get-WebBinding $website.name | Where { $_.bindingInformation -match "/[^:]*/" }
但它似乎没有填充$ 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
我想我不确定的是如何转换$ _。bindingInformation 变成字符串格式变量?对Powershell来说很新鲜,如果这看起来很简单,那就很抱歉。在这个例子中我需要$ IP变量为“10.206.138.131”...感谢您的帮助。
答案 0 :(得分:5)
您可以使用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
现在,由于每个绑定字符串的格式为:
[IP]:[Port]:[Hostname]
我们可以使用-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
最后,您可以使用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)
$IPs
变量现在是一个包含用于绑定的所有不同IP地址的数组,在您的情况下只是一个:
PS C:\> $IPs
10.206.138.131