octopus kb2506146 iis powershell powershell-v3.0 iis-8

kb2506146 - octopus powershell iis



Mostrar todos los sitios y enlaces en powershell (7)

Encontré esta pregunta porque quería generar una página web con enlaces a todos los sitios web que se ejecutan en mi IIS. Utilicé la answer Alexander Shapkin para llegar a lo siguiente para generar un montón de enlaces.

$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); } }

Luego pego los resultados en este HTML escrito apresuradamente.

<html> <style> a { display: block; } </style> {paste powershell results here} </body> </html>

Realmente no conozco Powershell, así que no dudes en editar mi respuesta para limpiarla.

Estoy documentando todos los sitios y enlaces relacionados con el sitio desde el IIS. ¿Se pregunta si hay una manera fácil de obtener esta lista a través del script de PowerShell en lugar de escribir manualmente mirando IIS?

Quiero que el resultado sea algo como esto:

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


La forma más fácil que vi:

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


Prueba esto

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 } }


Pruebe algo como esto para obtener el formato que deseaba:

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


Si solo desea enumerar todos los sitios (es decir, para encontrar un enlace)

Cambie el directorio de trabajo a C: / Windows / system32 / inetsrv

cd c: / Windows / system32 / inetsrv

A continuación, ejecute el sitio de la lista appcmd y genere un archivo. por ejemplo c: / IISSiteBindings.txt

sitio de lista de aplicaciones> c: / IISSiteBindings.txt

Ahora abra con el bloc de notas desde el símbolo del sistema.

Bloc de notas c: / IISSiteBindings.txt


prueba esto

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

Debería devolver algo que se parece a esto:

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

Desde aquí puede refinar los resultados, pero tenga cuidado. Un enlace a la declaración de selección no le proporcionará lo que necesita. En función de sus requisitos, crearía un objeto personalizado o hashtable.


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 } }