使用PowerShell获取IIS绑定时遇到问题



我正在做这件事。

Get-ChildItem -Path IIS:Sites

这很有效,但我想选择特定的项目,然后导出到一个文件中。我要选择"名称"、"状态"one_answers"绑定"。这样的事情;

Get-ChildItem -Path IIS:Sites | select-object name, state, bindings

问题是,绑定似乎是一个数组。我如何循环通过它并获得绑定?我应该像PSCustomObject一样使用吗?如何循环绑定数组并获得实际绑定?

谢谢。

我最终使用的方法是:

$allData=@()
Foreach ($Site in get-website) {
Foreach ($Bind in $Site.bindings.collection) {
$data = [PSCustomObject]@{
Name=$Site.name;
State=$Site.state;
Protocol=$Bind.Protocol;
IPAddress=$(if ($bind -like '*`[*') { ((($Bind -split "]")[0]).Split('[')[-1]) } else {$Bind.BindingInformation.Split(":")[0]})
Port=$Bind.BindingInformation.Split(":")[-2]
HostHeader=$Bind.BindingInformation.Split(":")[-1]
}
$allData+=$data
}
}

它为每个创建一个PSCustomObject,然后将结果添加到可以从中查询的数组$allData

绑定信息似乎本质上是以字符串的形式呈现的,例如:

123.123.123.123:80:mydomain.com
123.123.123.123:80:www.mydomain.com
123.123.123.123:443:mydomain.com
123.123.123.123:443:www.mydomain.com

因此,您需要使用-Split来分隔IP地址、端口号和主机地址,但由于它们是使用:分隔的,如果使用IPv6地址,则会中断。这就是IPAddress=部分如此复杂的原因,因为它同时处理IPv4和IPv6。

一旦运行以上内容,您可以根据需要以各种方式查询数组,例如,$allData返回所有内容,$allData[5]检索数组中的第6组绑定信息,$allData[5].Port仅检索第6组捆绑信息中的端口号,使用$allData | Where {$_.Protocol -eq "https"}查询数组以检索where子句中的所有条目,或者只需使用$allData | Select Name,State,Port选择您当时需要的特定信息子集

最新更新