Отображение всех сайтов и привязок в PowerShell
Я документирую все сайты и привязки, связанные с сайтом, из IIS. Есть ли простой способ получить этот список с помощью сценария PowerShell вместо ручного ввода, глядя на IIS?
Я хочу, чтобы результат был примерно таким:
Site Bindings
TestSite www.hello.com
www.test.com
JonDoeSite www.johndoe.site
Ответы
Ответ 1
Попробуйте что-то подобное, чтобы получить желаемый формат:
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
Ответ 2
Попробуй это:
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 не даст вам того, что вам нужно. Исходя из ваших требований, я бы создал пользовательский объект или хеш-таблицу.
Ответ 3
Самый простой способ, который я видел:
Foreach ($Site in get-website) { Foreach ($Bind in $Site.bindings.collection) {[pscustomobject]@{name=$Site.name;Protocol=$Bind.Protocol;Bindings=$Bind.BindingInformation}}}
Ответ 4
Если вы просто хотите перечислить все сайты (т.е. найти привязку)
Измените рабочий каталог на "C:\Windows\system32\inetsrv"
cd c:\Windows\system32\inetsrv
Затем запустите "список сайтов appcmd" (множественное число) и выведите его в файл. например, c:\IISSiteBindings.txt
список сайтов appcmd> c:\IISSiteBindings.txt
Теперь откройте с помощью блокнота из командной строки.
блокнот c:\IISSiteBindings.txt
Ответ 5
Попробуйте это
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
}
}
Ответ 6
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
}
}
Ответ 7
Я нашел этот вопрос, потому что хотел создать веб-страницу со ссылками на все сайты, работающие на моем экземпляре IIS. Я использовал ответ Александра Шапкина, чтобы придумать следующее, чтобы сгенерировать кучу ссылок.
$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);
}
}
Затем я вставляю результаты в этот поспешно написанный HTML:
<html>
<style>
a { display: block; }
</style>
{paste PowerShell results here}
</body>
</html>