agowa338
Goto Top

Powershell Variablen und Pipes

Ich verstehe hier das Verhalten von Powershell nicht, wenn ich den Befehl
1
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:
1
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-ID: 297369

Url: https://administrator.de/forum/powershell-variablen-und-pipes-297369.html

Ausgedruckt am: 04.04.2025 um 16:04 Uhr

114757
Lösung 114757 25.02.2016 aktualisiert um 20:47:24 Uhr
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
agowa338
agowa338 25.02.2016 um 20:47:46 Uhr
Goto Top
Danke, das hat funktioniert!