emeriks
Goto Top

PowerShell - Get-Content - spinnt

Hi,
habe ein PS-Script.
Get-Content liefert für dieselbe Datei (keine Replikate) verschiedene Ergebnisse, wenn das Script auf verschiedenen Servern ausgeführt wird.

Win2008 R2, PS 4
  • Get-Content liest die Datei in Zeilen ein, also liefert ein Array von Zeilen, sodass man sich mit ForEach durch die Zeilen hangeln kann.

Win2016, PS 5
  • Get-Content liest die Datei als 1 String ein, also beim ForEach nur eine Zeile.

Was ist das für ein Quark?

E.

...
$ControlFileText = Get-Content -Path $ControlFilePath

ForEach($Line in $ControlFileText)
{
  $Line
}
...

Content-ID: 367189

Url: https://administrator.de/forum/powershell-get-content-spinnt-367189.html

Ausgedruckt am: 31.03.2025 um 14:03 Uhr

colinardo
colinardo 07.03.2018 aktualisiert um 11:33:49 Uhr
Goto Top
Servus.
Setz mal testweise den Parameter -ReadCount 1 bei Get-Content.
Dateimerkmale? CR oder CRLF als Zeilenenden?
Mit measure oder Count und getType() die Variable überprüft?

Grüße Uwe
colinardo
Lösung colinardo 07.03.2018 aktualisiert um 11:40:06 Uhr
Goto Top
Zusätzlich mal die Preference-Variable $OFS der Session gecheckt? Und die Variable die den Inhalt als Array erhält mal explizit als Array definiert?
[string[]]$ControlFileText
emeriks
emeriks 07.03.2018 um 11:43:34 Uhr
Goto Top
Hi Uwe,
-ReadCount 1
ändert gar nichts. Win2008R2 PS4 liefert weiter jede Zeile für sich, Win2016 PS5 weiter nur als eine Zeile.

getType
$ControlFileText = Get-Content -Path $ControlFilePath -ReadCount 1
$ControlFileText.GetType()

Win2008R2 PS4
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object                                 System.Array

Win2016 PS5
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object
emeriks
emeriks 07.03.2018 um 11:45:03 Uhr
Goto Top
[string[]]$ControlFileText
Das hilft!
Aber warum ist das jetzt auf einmal nötig?
colinardo
Lösung colinardo 07.03.2018 aktualisiert um 11:49:25 Uhr
Goto Top
Eventuell war die Variable vor dem Einlesen schon als String und nicht als String Array deklariert.
Aber warum ist das jetzt auf einmal nötig?
Ist es normalerweise auch nicht. Kann das hier aber auch mit den selben OS wie oben nicht nachvollziehen.
emeriks
emeriks 07.03.2018 um 11:51:08 Uhr
Goto Top
Eventuell war die Variable vor dem Einlesen schon als String und nicht als String Array deklariert.
Ja, Uwe, das war es!
Ich habe eben die ISE neu gestartet, das "[string[]]" entfernt und es ging sofort. Ich muss irgendwann zwischendurch beim Testen diese Variable mal als [String] deklariert haben. Das beruhigt mich doch sehr ... face-wink

Danke Uwe!
colinardo
colinardo 07.03.2018 aktualisiert um 11:57:15 Uhr
Goto Top
Ich kann dich beruhigen, da kommt selbst mir auch immer mal wieder vor wenn ich die ISE exezessiv mit Variablen vollstopfe face-smile. Und das Kleinhirn nimmt leider immer wieder die selben Variablen Bezeichnungen ...
Ein auf $null setzen der Variablen oder Clear-Variable sollte auch helfen.

Keine Ursache face-smile.