Парсинг нескольких XML значений узлов для экспорта в CSV - PullRequest
0 голосов
/ 04 марта 2020

Попытка получить значение следующих узлов из файла конфигурации IIS xml

Location Path =
allowUnlisted =
ipAddress =
subnetMask =

Я завис на части подсетиMask

@ Тео предоставил большую часть исправления для это уже, все, что я пытаюсь, сбрасывает весь массив Su bnet в поле su bnet

[xml]$xmlfull = (Get-Content .\Sample.xml)
$result = $xmlfull.configuration.location | ForEach-Object {
    $client        = $_.path
    $allowUnlisted = $_.'system.WebServer'.security.ipSecurity.allowUnlisted
    $subnets = $($_.'system.WebServer'.security.ipSecurity.add.subnetMask)
    $ips = $($_.'system.WebServer'.security.ipSecurity.add.ipAddress)
    foreach ($ip in $ips ) {
        [PsCustomObject]@{
        ExampleClinet = $client 
        AllowUnlisted = $allowUnlisted
        IPAddress     = $ip
        Subnet        = 
       }
      }
    }

# output on screen
$result

# output to CSV file
$result | Export-Csv -Path '\test.csv' -NoTypeInformation

Sample XML

 <configuration> 
     <location path="Example/5192_proxy">
            <system.webServer>
                <security>
                    <ipSecurity allowUnlisted="false">
                        <add ipAddress="10.10.100.0" subnetMask="255.255.252.0" allowed="true" />
                        <add ipAddress="10.10.48.0" subnetMask="255.255.240.0" allowed="true" />
                        <add ipAddress="10.10.100.0" subnetMask="255.255.252.0" allowed="true" />
                        <add ipAddress="192.168.63.97" subnetMask="255.255.255.224" allowed="true" />
                    </ipSecurity>
                </security>
            </system.webServer>
        </location>
        <location path="Example/3796_Proxy">
            <system.webServer>
                <security>
                    <ipSecurity allowUnlisted="false">
                        <add ipAddress="192.168.30.52" allowed="true" />
                        <add ipAddress="10.10.48.0" subnetMask="255.255.240.0" allowed="true" />
                    </ipSecurity>   
                   </security>
            </system.webServer>
        </location>
    </configuration>

1 Ответ

1 голос
/ 04 марта 2020

Измените переменную $ips, чтобы она содержала узлы <add ...> вместо значения атрибута ipAddress, тогда вы можете ссылаться на оба в вашем l oop:

# ...
$ips = @($_.'system.WebServer'.security.ipSecurity.add)
foreach ($ip in $ips) {
  [PsCustomObject]@{
    ExampleClinet = $client 
    AllowUnlisted = $allowUnlisted
    IPAddress     = $ip.ipAddress
    Subnet        = $ip.subnetMask
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...