Вернуть IP-адрес, который разрешает каждая привязка в IIS - PullRequest
0 голосов
/ 12 ноября 2018

Я работаю над созданием сценария, который сообщит мне о каждой привязке на сервере и к какому действующему IPv4-адресу разрешается привязка. Я очень близок, но, поскольку я экспортирую свои результаты из IIS в CSV, а затем запускаю Test-connection для каждой привязки из этого CSV, у меня возникают проблемы с добавлением результатов в массив и экспортом готовых результатов в файл CSV. Вот скрипт:

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

$CSVvar = import-csv "c:\temp\$date-$hostname.csv"
$i=0
foreach ($v in $CSVvar){
If ($v.Header -ne '') {
$result = Test-Connection $v.Header -ErrorAction SilentlyContinue
if ($result) {
    $IP = ($result.IPV4Address).IPAddressToString
    echo $IP
    $v.ResolveAddress = $IP
}
}
}
$CSVvar | export-csv "c:\temp\$date-$hostname.csv" -Append -notypeinformation

Я думаю, что было бы лучше пропинговать каждую привязку перед первым экспортом файла CSV, но я не могу найти способ заставить его попробовать каждый элемент объекта Header по отдельности, и я продолжаю падать сценарий таким образом. Если бы я мог получить IP-адрес (ы) для сохранения обратно в столбец $ CSVvar.ResolveAddress, это было бы хорошо для меня. Любая помощь приветствуется!

1 Ответ

0 голосов
/ 12 ноября 2018

Это похоже на большой код, просто чтобы сделать это. Как насчет этого подхода.

### Get website info

Import-Module -Name WebAdministration
Get-Website | select name,id,state,physicalpath,
@{n="Host"; e= { $env:COMPUTERNAME }},
@{n="Bindings"; e= { ($_.bindings | select -expa collection) -join ';' }},
@{n="LogFile";e={ $_.logfile | select -expa directory}}, 
@{n="attributes"; e={($_.attributes | % { $_.name + "=" + $_.value }) -join ';' }}, 
@{n="ConnectionTest"; e={(Test-Connection -ComputerName ($Bindings -split 'http |:')[1] -Count 1 -Quiet)}} | 
Export-Csv -NoTypeInformation -Path 'C:\temp\my_list.csv'

Import-Csv -Path 'C:\temp\my_list.csv'

# Results

name           : Default Web Site
id             : 1
state          : Started
physicalPath   : %SystemDrive%\inetpub\wwwroot
Host           : IIS01
Bindings       : http *:80:;https *:443: sslFlags=0
LogFile        : %SystemDrive%\inetpub\logs\LogFiles
attributes     : name=Default Web Site;id=1;serverAutoStart=True;state=1
ConnectionTest : True

name           : kcd
id             : 2
state          : Started
physicalPath   : C:\inetpub\kcd
Host           : IIS01
Bindings       : http 192.168.7.11:80:kcd.contoso.com
LogFile        : %SystemDrive%\inetpub\logs\LogFiles
attributes     : name=kcd;id=2;serverAutoStart=True;state=1
ConnectionTest : True

Конечно, можно разбить / собрать все остальные собранные кусочки / информацию в отдельные рассчитанные свойства по мере необходимости.

Обновление для OP

... но на самом деле все, с чем я сталкиваюсь, это получение информации об IPv4 из ответ ConnectionTest, приложенный к исходному документу ...

Просто используйте тот же код, который я использовал для Test-Connection.

Import-Module -Name WebAdministration
Get-Website | select name,id,state,physicalpath,
@{n="Host"; e= { $env:COMPUTERNAME }},
@{n="Bindings"; e= { ($_.bindings | select -expa collection) -join ';' }},
@{n="LogFile";e={ $_.logfile | select -expa directory}}, 
@{n="attributes"; e={($_.attributes | % { $_.name + "=" + $_.value }) -join ';' }}, 
@{n="ConnectionTest"; e={(Test-Connection -ComputerName ($Bindings -split 'http |:')[1] -Count 1 -Quiet)}},
@{n="SiteIPA"; e={($Bindings -split 'http |:')[1]}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...