it-swarm.com.de

Zeigen Sie alle Sites und Bindungen in PowerShell an

Ich dokumentiere alle Sites und Bindungen, die mit der Site in Verbindung stehen, vom IIS aus. Gibt es eine einfache Möglichkeit, diese Liste über ein PowerShell-Skript abzurufen, anstatt IIS manuell einzugeben?

Ich möchte, dass die Ausgabe etwa so aussieht:

Site                          Bindings
TestSite                     www.hello.com
                             www.test.com
JonDoeSite                   www.johndoe.site
36
sanjeev40084

Versuchen Sie etwas Ähnliches, um das gewünschte Format zu erhalten:

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
41
Frode F.

Versuche dies:

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

Es sollte etwas zurückgeben, das so aussieht:

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

Von hier aus können Sie die Ergebnisse verfeinern, aber seien Sie vorsichtig. Eine Pipe zur select-Anweisung gibt Ihnen nicht das, was Sie brauchen. Basierend auf Ihren Anforderungen würde ich ein benutzerdefiniertes Objekt oder eine Hashtabelle erstellen.

74

Der einfachste Weg, wie ich gesehen habe:

Foreach ($Site in get-website) { Foreach ($Bind in $Site.bindings.collection) {[pscustomobject]@{name=$Site.name;Protocol=$Bind.Protocol;Bindings=$Bind.BindingInformation}}}
19

Wenn Sie nur alle Websites auflisten möchten (dh eine Bindung finden)

Ändern Sie das Arbeitsverzeichnis in "C:\Windows\system32\inetsrv".

cd c:\Windows\system32\inetsrv

Führen Sie als Nächstes "appcmd list sites" (Plural) aus und geben Sie sie in eine Datei aus. z. B. c:\IISSiteBindings.txt

Appcmd-Listenseiten> c:\IISSiteBindings.txt

Öffnen Sie nun mit dem Notizblock von Ihrer Eingabeaufforderung.

notepad c:\IISSiteBindings.txt

14
Armand G.

Versuche dies

function DisplayLocalSites
{

try{

Set-ExecutionPolicy unrestricted

$list = @()
foreach ($webapp in get-childitem IIS:\Sites\)
{
    $name = "IIS:\Sites\" + $webapp.name
    $item = @{}

$item.WebAppName = $webapp.name

foreach($Bind in $webapp.Bindings.collection)
{
    $item.SiteUrl = $Bind.Protocol +'://'+         $Bind.BindingInformation.Split(":")[-1]
}


$obj = New-Object PSObject -Property $item
$list += $obj
}

$list | Format-Table -a -Property "WebAppName","SiteUrl"

$list | Out-File -filepath C:\websites.txt

Set-ExecutionPolicy restricted

}
catch
{
$ExceptionMessage = "Error in Line: " + $_.Exception.Line + ". " +     $_.Exception.GetType().FullName + ": " + $_.Exception.Message + " Stacktrace: "    + $_.Exception.StackTrace
$ExceptionMessage
}
}
2
snimakom
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
    }
}
2
user6804160

Ich habe diese Frage gefunden, weil ich eine Webseite mit Links zu allen Websites generieren wollte, die in meiner Instanz IIS ausgeführt werden. Ich habe die Antwort von Alexander Shapkin verwendet, um mit den folgenden Informationen eine Reihe von Links zu generieren.

$hostname = "localhost"

Foreach ($Site in get-website) {
    Foreach ($Bind in $Site.bindings.collection) {
        $data = [PSCustomObject]@{
            name=$Site.name;
            Protocol=$Bind.Protocol;
            Bindings=$Bind.BindingInformation
        }
        $data.Bindings = $data.Bindings -replace '(:$)', ''
        $html = "<a href=""" + $data.Protocol + "://" + $data.Bindings + """>" + $data.name + "</a>"
        $html.Replace("*", $hostname);
    }
}

Dann füge ich die Ergebnisse in dieses hastig geschriebene HTML ein:

<html>
<style>
    a { display: block; }
</style>
{paste PowerShell results here}
</body>
</html>
0
Walter Stabosz