Quantcast
Channel: Windows PowerShell Forum
Viewing all articles
Browse latest Browse all 2314

Mit Powershell xml File auslesen und in ein csv schreiben

$
0
0

Hallo Forum

Ich bin nun schon seit einigen Stunden am versuchen, dieses xml File auszulesen und in eine csv Liste zu schreiben. Leider gelingt mir dies noch nicht wie gewünscht und ich hoffe jemand von euch kann mir dieses Rätsel lösen. :-)

Das XML-File hat folgende Struktur:

<?xml version="1.0" encoding="utf-8"?><VMSystem xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><VersionConfig>6.0.0.5</VersionConfig><Filename>XMLConf.xml</Filename><Compatibilty>VMSystem</Compatibilty><Management><ManagementName>Basel</ManagementName></Management><DeviceServerList><DeviceServerCnf><DeviceServerName>bs-lsm-001</DeviceServerName><VideoDeviceList><VideoDevice><VideoDeviceHostName>bs-enc-001</VideoDeviceHostName><VideoDeviceCameraList><Camera><CameraUID>1900001</CameraUID></Camera></VideoDeviceCameraList></VideoDevice><VideoDevice><VideoDeviceHostName>bs-enc-002</VideoDeviceHostName><VideoDeviceCameraList><Camera><CameraUID>1900002</CameraUID></Camera></VideoDeviceCameraList></VideoDevice><VideoDevice><VideoDeviceHostName>kau-cam-003</VideoDeviceHostName><VideoDeviceCameraList><Camera><CameraUID>1900149</CameraUID></Camera></VideoDeviceCameraList></VideoDevice></VideoDeviceList></DeviceServerCnf><DeviceServerCnf><DeviceServerName>bs-dvs-001</DeviceServerName><VideoDeviceList><VideoDevice><VideoDeviceHostName>bsja-enc-006</VideoDeviceHostName><VideoDeviceCameraList><Camera><CameraUID>1900115</CameraUID></Camera></VideoDeviceCameraList></VideoDevice><VideoDevice><VideoDeviceHostName>bsja-enc-005</VideoDeviceHostName><VideoDeviceCameraList><Camera><CameraUID>1900114</CameraUID></Camera></VideoDeviceCameraList></VideoDevice></VideoDeviceList></DeviceServerCnf></DeviceServerList></VMSystem>

Am Schluss möchte ich eine Liste, welche folgendermassen aussieht:

Standort     DeviceServerName     CameraID     CameraHostname 

Basel          bs-lsm-001                 1900001      bs-enc-001
Basel          bs-lsm-001                 1900002      bs-enc-002
Basel          bs-lsm-001                 1900149      kau-cam-003
Basel          bs-dvs-001                 1900115      bsja-enc-006

Versucht habe ich es mit diesem Code, jedoch kriege ich die Verlinkung der CameraID und dem CameraHostName nicht hin.

$DestinationDirectory = "\\zol-dc-01\Daten\Backups\Massenexport"
$Files = Get-ChildItem -Path $DestinationDirectory -Filter *.xml
foreach ($File in $Files)
{
    $a=([xml](gc $DestinationDirectory\$File)).VMSystem
    $d=([xml](gc $DestinationDirectory\$File)).VMSystem.DeviceServerList.DeviceServerCnf | % {
      foreach ($i in $_.VideoDeviceList.VideoDevice.VideoDeviceCameraList.Camera.CameraUID)
      {
        $o = New-Object Object
        Add-Member -InputObject $o -MemberType NoteProperty -Name Standort -Value $a.Management.ManagementName
        Add-Member -InputObject $o -MemberType NoteProperty -Name DeviceServerName -Value $_.DeviceServerName
        Add-Member -InputObject $o -MemberType NoteProperty -Name CameraID -Value $i

        foreach ($j in $_.VideoDeviceList.VideoDevice.VideoDeviceHostName)
        {
            Add-Member -InputObject $o -MemberType NoteProperty -Name CameraHostname -Value $_.VideoDeviceList.VideoDevice.VideoDeviceHostName -Force | Where-Object {$i -eq  ($_.VideoDeviceList.VideoDevice.VideoDeviceCameraList.Camera.CameraUID)}
        }

        $o

      }
    }
    $d
    #$d | Export-Csv -NoTypeInformation -Path "$DestinationDirectory\$File.csv"

Ich habe im Beispiel nun lediglich ein xml File erwähnt. Am Schluss habe ich ca. 16 xml Files, welche ich nach diesem Verfahren durchsuchen und eine csv Liste erstellen möchte. Dies nur zur Erklärung.

Danke für eure Hilfe oder Tipps.
Gruss Thomas


Viewing all articles
Browse latest Browse all 2314


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>