Powershell: как вывести таблицу в файл журнала

Я пытаюсь создать сценарий для своей работы, и мне нужно прочитать файл xml, чтобы проверить, есть ли дублирующиеся параметры. Пока я могу вывести таблицу, но мне не удалось экспортировать ее в какой-либо файл (журнал, csv и т. д.).

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

Это мой текущий прогресс.

      $SectionName = 'np'
$path = "S:\Docker\NP6\Volumes\smartupdate\config\SmartUpdateLocal.xml"
[xml] $xml = Get-Content $path
$param = $xml.SelectSingleNode("//Section[@name='$SectionName']")
$table = $param.Parameter
$table

И таблицу можно увидеть:

Результат скрипта

Но поскольку я буду запускать этот скрипт для тысячи серверов, я хотел бы экспортировать что-то вроде:

      ---------Server A------------       
Name                  Value
ena..                  true
base..                  0
sto..                  22592
ena..                   EAI
---------Server B------------       
Name                  Value
ena..                  true
base..                  0
sto..                  22592
ena..                   EAI

Формат XML

      <SmartUpdate>
  <Settings>
    <Section name="np">
      <Parameter name="enableStatusFileCreation" value="true" />
      <Parameter name="baseStatusCode" value="0" />
      <Parameter name="storeId" value="43001" />
      <Parameter name="enableTransportMechanismAndPackage" value="true"/>
      <Parameter name="statusTransportMechanism" value="EAI" />
    </Section>
  </Settings>
</SmartUpdate>

Также я зацикливаю удаленные серверы

      $computerList = Get-Content $DeviceListFilePath
    foreach($computer in $computerList)
    {
        $SectionName = 'np'
        Write-Host "OPENING XML FILE" -ForegroundColor Yellow
        $path = "\\$server_ip\$FileName"
        [xml] $xml = Get-Content $path
        $param = $xml.SelectSingleNode("//Section[@name='$SectionName']")

Спасибо вам за помощь.

1 ответ

Вот что я бы порекомендовал вам сделать, чтобы получить вывод, который вы можете экспортировать в CSV, и его очень легко сортировать и фильтровать:

      $SectionName = 'np'
$result = foreach($computer in Get-Content $DeviceListFilePath) {

    Write-Host "OPENING XML FILE" -ForegroundColor Yellow
    
    # Unclear where `$server_ip` and `$FileName` are coming from,
    # assuming they're valid values to construct the UNC Path
    # or that you meant: `\\$computer\$FileName`
    $path = "\\$server_ip\$FileName"
    $xml  = [xml]::new()
    $xml.Load($path)

    # This Dictionary is used to construct the output.
    $out = [ordered]@{
        Server = $computer
    }

    $xml.SelectSingleNode("//Section[@name='$SectionName']").Parameter |
        ForEach-Object { $out[$_.name] = $_.Value }

    [pscustomobject] $out
}

$result | Export-Csv path\to\export.csv -NoTypeInformation

Поскольку у меня нет доступа к вашим путям UNC, я бы показал, как будет выглядеть вывод, используя XML, представленный в вопросе, с двумя серверами:

      $SectionName = 'np'
$result = foreach($computer in 'server A', 'server B') {
    # the example XML is stored in my current directory
    $path = '.\file.xml'
    $xml  = [xml]::new()
    $xml.Load($path)
    
    $out = [ordered]@{
        Server = $computer
    }

    $xml.SelectSingleNode("//Section[@name='$SectionName']").Parameter |
        ForEach-Object { $out[$_.name] = $_.Value }

    [pscustomobject] $out
}

$result

Вывод из этого примера будет выглядеть так:

      Server                             : server A
enableStatusFileCreation           : true
baseStatusCode                     : 0
storeId                            : 43001
enableTransportMechanismAndPackage : true
statusTransportMechanism           : EAI

Server                             : server B
enableStatusFileCreation           : true
baseStatusCode                     : 0
storeId                            : 43001
enableTransportMechanismAndPackage : true
statusTransportMechanism           : EAI

И как CSV:

      PS \> $result | ConvertTo-Csv

"Server","enableStatusFileCreation","baseStatusCode","storeId","enableTransportMechanismAndPackage","statusTransportMechanism"
"server A","true","0","43001","true","EAI"
"server B","true","0","43001","true","EAI"
Другие вопросы по тегам