使用powershell在IIS中configuration所有绑定

我正在寻找一种方法来通过我的IIS中已经configuration的所有绑定设置

即时通讯使用此与Powershell中的IIS一起工作:

Import-Module WebAdministration 

到目前为止,我能够得到我想要的主要信息:

 $Websites = Get-ChildItem IIS:\Sites 

我的数组$网站填写正确,并使用以下命令…

 $Websites[2] 

我收到了这个结果:

 Name ID State Physical Path Bindings ---- -- ----- ------------- -------------- WebPage3 5 D:\Web\Page3 http *:80:WebPage3 https *:443:WebPage3 

现在,这是我难以忍受的部分:

我想检查绑定是否正确。 为了做到这一点,我需要绑定。 我试过了:

 foreach ($site in $Websites) { $site = $Websites[0] $site | select-string "http" } 

debugging该代码显示,$ Site不包含我所期望的:“Microsoft.IIs.PowerShell.Framework.ConfigurationElement”。 我目前还不知道如何显式地获得绑定信息,以便像这样(在foreach循环中):

  if ($site.name -eq "WebPage3" -and $site.Port -eq "80") { #website is ok } else { #remove all current binding #add correct binding } 

感谢您的帮助!


解:

 Import-Module WebAdministration $Websites = Get-ChildItem IIS:\Sites foreach ($Site in $Websites) { $Binding = $Site.bindings [string]$BindingInfo = $Binding.Collection [string]$IP = $BindingInfo.SubString($BindingInfo.IndexOf(" "),$BindingInfo.IndexOf(":")-$BindingInfo.IndexOf(" ")) [string]$Port = $BindingInfo.SubString($BindingInfo.IndexOf(":")+1,$BindingInfo.LastIndexOf(":")-$BindingInfo.IndexOf(":")-1) Write-Host "Binding info for" $Site.name " - IP:"$IP", Port:"$Port if ($Site.enabledProtocols -eq "http") { #DO CHECKS HERE } elseif($site.enabledProtocols -eq "https") { #DO CHECKS HERE } } 

我不知道你想要做什么,但我会尝试。 我看到你引用了$Websites[2] websites $Websites[2]这是webPage3 。 你可以这样做:

 $site = $websites | Where-object { $_.Name -eq 'WebPage3' } 

然后当你看$site.Bindings ,你会意识到你需要Collection成员:

 $site.bindings.Collection 

在我的机器上,这返回这个:

 protocol bindingInformation -------- ------------------ http *:80: net.tcp 808:* net.pipe * net.msmq localhost msmq.formatname localhost https *:443: 

然后测试可能看起来像这样:

 $is80 = [bool]($site.bindings.Collection | ? { $_.bindingInformation -eq '*:80:' }) if ($is80) { #website is ok } else { #remove all current binding #add correct binding } 

我将Collection内容发送到管道,并仅bindingInformation属性bindingInformation等于期望值(更改它)的对象。 然后我把它[bool] 。 如果有需要的项目,这将返回$true ,否则返回$false

我发现,如果在一个网站上有多个绑定,那么如果我需要脚本访问绑定的个别部分,否则我只有第一个绑定。 为了得到他们所有我需要的脚本扩展如下:

 Import-modulee WebAdministration $Websites = Get-ChildItem IIS:\Sites foreach ($Site in $Websites) { $Binding = $Site.bindings [string]$BindingInfo = $Binding.Collection [string[]]$Bindings = $BindingInfo.Split(" ") $i = 0 $header = "" Do{ Write-Output ("Site :- " + $Site.name + " <" + $Site.id +">") Write-Output ("Protocol:- " + $Bindings[($i)]) [string[]]$Bindings2 = $Bindings[($i+1)].Split(":") Write-Output ("IP :- " + $Bindings2[0]) Write-Output ("Port :- " + $Bindings2[1]) Write-Output ("Header :- " + $Bindings2[2]) $i=$i+2 } while ($i -lt ($bindings.count)) } 

我有类似的最后一个答案,但这更正HTTPS网站,并添加了一些有用的信息。

 Import-modulee WebAdministration $hostname = hostname $Websites = Get-ChildItem IIS:\Sites $date = (Get-Date).ToString('MMddyyyy') foreach ($Site in $Websites) { $Binding = $Site.bindings [string]$BindingInfo = $Binding.Collection [string[]]$Bindings = $BindingInfo.Split(" ")#[0] $i = 0 $status = $site.state $path = $site.PhysicalPath $fullName = $site.name $state = ($site.name -split "-")[0] $Collection = ($site.name -split "-")[1] $status = $site.State $anon = get-WebConfigurationProperty -Filter /system.webserver/security/authentication/AnonymousAuthentication -Name Enabled -PSPath IIS:\sites -Location $site.name | select-object Value $basic = get-WebConfigurationProperty -Filter /system.webserver/security/authentication/BasicAuthentication -Name Enabled -PSPath IIS:\ -location $site.name | select-object Value Do{ if( $Bindings[($i)] -notlike "sslFlags=*"){ [string[]]$Bindings2 = $Bindings[($i+1)].Split(":") $obj = New-Object PSObject $obj | Add-Member Date $Date $obj | Add-Member Host $hostname $obj | Add-Member State $state $obj | Add-Member Collection $Collection $obj | Add-Member SiteName $Site.name $obj | Add-Member SiteID $site.id $obj | Add-member Path $site.physicalPath $obj | Add-Member Protocol $Bindings[($i)] $obj | Add-Member Port $Bindings2[1] $obj | Add-Member Header $Bindings2[2] $obj | Add-member AuthAnon $Anon.value $obj | Add-member AuthBasic $basic.value $obj | Add-member Status $status $obj #take this out if you want to save to csv| export-csv "c:\temp\$date-$hostname.csv" -Append -notypeinformation $i=$i+2 } else{$i=$i+1} } while ($i -lt ($bindings.count)) }