agowa338
Goto Top

Powershell Variablen und Pipes

Ich verstehe hier das Verhalten von Powershell nicht, wenn ich den Befehl
Get-EventLog -LogName * | ForEach-Object {$p = $_; $p.Entries |Export-Csv -path $p.LogDisplayName -Debug}
ausführe, erhalte ich z. B. folgende Meldung: 'Ausführen des Vorgangs "Export-Csv" für das Ziel "Anwendung".'
Wenn ich aber nun:
Get-EventLog -LogName * | ForEach-Object {$p = $_; $p.Entries |Export-Csv -path $InventoryPath\$computername\$p.LogDisplayName -Debug}
ausführe, erhalte ich folgende Meldung: 'Ausführen des Vorgangs "Export-Csv" für das Ziel "E:\System.Diagnostics.EventLog.LogDisplayName".'.

Kann mir jemand erklären, warum "$p.LogDisplayName" hier zwei unterschiedliche werte liefert?

Content-Key: 297369

Url: https://administrator.de/contentid/297369

Printed on: April 20, 2024 at 08:04 o'clock

Mitglied: 114757
Solution 114757 Feb 25, 2016 updated at 19:47:24 (UTC)
Goto Top
Moin.
Weil du eine Eigenschaft eines Objektes abfragst und die Shell hier den Punkt hinter der Variablen $p als String interpretiert also nur das $p übernimmt und das ist nunmal ein Objekt des Typs System.Diagnostics.EventLog.LogDisplayName.

Schreibe den Pfad also besser so dann ist klar was die Shell damit machen soll.
....... | Export-Csv -path "$InventoryPath\$computername\$($p.LogDisplayName)"
oder auch so
....... | Export-Csv -path ("$InventoryPath\$computername\" + $p.LogDisplayName)

Gruß jodel32
Member: agowa338
agowa338 Feb 25, 2016 at 19:47:46 (UTC)
Goto Top
Danke, das hat funktioniert!