58

IIS からのサイトに関連するすべてのサイトとバインディングを文書化しています。IIS を見て手動で入力するのではなく、PowerShell スクリプトを使用してこのリストを取得する簡単な方法はありますか?

出力を次のようにしたい:

Site                          Bindings
TestSite                     www.hello.com
                             www.test.com
JonDoeSite                   www.johndoe.site
4

8 に答える 8

97

これを試して:

Import-Module Webadministration
Get-ChildItem -Path IIS:\Sites

次のようなものが返されます。

Name             ID   State      Physical Path                  Bindings
----             --   -----      -------------                  --------
ChristophersWeb 22   Started    C:\temp             http *:8080:ChristophersWebsite.ChDom.com

ここから結果を絞り込むことができますが、注意が必要です。select ステートメントへのパイプでは、必要なものが得られません。あなたの要件に基づいて、カスタム オブジェクトまたはハッシュテーブルを作成します。

于 2013-03-20T16:21:25.150 に答える
72

必要な形式を取得するには、次のようなことを試してください。

Get-WebBinding | % {
    $name = $_.ItemXPath -replace '(?:.*?)name=''([^'']*)(?:.*)', '$1'
    New-Object psobject -Property @{
        Name = $name
        Binding = $_.bindinginformation.Split(":")[-1]
    }
} | Group-Object -Property Name | 
Format-Table Name, @{n="Bindings";e={$_.Group.Binding -join "`n"}} -Wrap
于 2013-03-20T16:34:52.827 に答える
25

すべてのサイトを一覧表示するだけの場合 (つまり、バインディングを検索する場合)

作業ディレクトリを「C:\Windows\system32\inetsrv」に変更します

cd c:\Windows\system32\inetsrv

次に「appcmd list sites」(複数) を実行し、ファイルに出力します。例 c:\IISSiteBindings.txt

appcmd リスト サイト > c:\IISSiteBindings.txt

コマンドプロンプトからメモ帳で開きます。

メモ帳 c:\IISSiteBindings.txt

于 2016-02-02T16:20:06.670 に答える
2
function Get-ADDWebBindings {
param([string]$Name="*",[switch]$http,[switch]$https)
    try {
    if (-not (Get-Module WebAdministration)) { Import-Module WebAdministration }
    Get-WebBinding | ForEach-Object { $_.ItemXPath -replace '(?:.*?)name=''([^'']*)(?:.*)', '$1' } | Sort | Get-Unique | Where-Object {$_ -like $Name} | ForEach-Object {
        $n=$_
        Get-WebBinding | Where-Object { ($_.ItemXPath -replace '(?:.*?)name=''([^'']*)(?:.*)', '$1') -like $n } | ForEach-Object {
            if ($http -or $https) {
                if ( ($http -and ($_.protocol -like "http")) -or ($https -and ($_.protocol -like "https")) ) {
                    New-Object psobject -Property @{Name = $n;Protocol=$_.protocol;Binding = $_.bindinginformation}
                }
            } else {
                New-Object psobject -Property @{Name = $n;Protocol=$_.protocol;Binding = $_.bindinginformation}
            }
        }
    }
    }
    catch {
       $false
    }
}
于 2016-09-07T10:12:16.583 に答える