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-Key: 367189

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

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

Member: colinardo
colinardo Mar 07, 2018 updated at 10:33:49 (UTC)
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
Member: colinardo
Solution colinardo Mar 07, 2018 updated at 10:40:06 (UTC)
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
Member: emeriks
emeriks Mar 07, 2018 at 10:43:34 (UTC)
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
Member: emeriks
emeriks Mar 07, 2018 at 10:45:03 (UTC)
Goto Top
[string[]]$ControlFileText
Das hilft!
Aber warum ist das jetzt auf einmal nötig?
Member: colinardo
Solution colinardo Mar 07, 2018 updated at 10:49:25 (UTC)
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.
Member: emeriks
emeriks Mar 07, 2018 at 10:51:08 (UTC)
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!
Member: colinardo
colinardo Mar 07, 2018 updated at 10:57:15 (UTC)
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.