Powershell IIS Get-Binding列表export-csv issue System.Object

时间:2015-02-24 20:02:17

标签: powershell iis

我试图获取一个列出IIS站点名称,FilePath和Bindings的脚本,这在我export-csv时效果很好。这样做的时候,我在路径的结果中得到了System.Object [],并且不知道如何纠正它。

Get-WebBinding | % {
$names = $_.ItemXPath -replace '(?:.*?)name=''([^'']*)(?:.*)', '$1'
$path = get-website $names | select-object physicalpath
New-Object psobject -Property @{
    Binding = $_.bindinginformation.Split(":")[-1]
    path = $path
    Name = $names
}    } | export-csv c:\test1.csv -notypeinformation

我实际上为此创建了一个更优雅的解决方案

解决方案:

Import-Module 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 #| export-csv "c:\temp\$date-$hostname.csv" -Append -notypeinformation
            $i=$i+2
        }
        else{$i=$i+1}
    } while ($i -lt ($bindings.count))
}

1 个答案:

答案 0 :(得分:0)

这是因为CSV输出在嵌套对象中非常糟糕。如果你看看你的代码,你的路径"属性基本上是一个"切片"网站对象。您想要做的是扩展该变量,以便您获得实际值(参见下面的示例)。这是ISE中2分钟调试真正有用的时间之一!

Get-WebBinding | ForEach-Object {
    $names = $_.ItemXPath -replace '(?:.*?)name=''([^'']*)(?:.*)', '$1'
    $path = get-website $names | select-object -expandproperty physicalpath
    New-Object psobject -Property @{
        Binding = $_.bindinginformation.Split(":")[-1]
        path = $path
        Name = $names
    }    
    }| export-csv c:\test1.csv -notypeinformation