pixel0815
Goto Top

Inhalt einer INI Datei in eine Datei schreiben per PS

Hallo zusammen,

ich habe gerade eine Idee bezüglich einer verzwickten Konfigurationsdatei ( *.ini ) und einer extrahierung von einzelnen Zeilen in eine Textdatei / CSV zum exportieren.
Das Skript soll die Zeile mit dem NAMEN und IDENT in eine csv Datei schreiben. Die Datei ist unglaublich lang und deshalb würde ich gerne genau die zwei Zeilen exportieren lassen um diese Liste in Excel dann zu vervollständigen.

Hat da jemand was auf Tasche?

Ein Auszug aus der Datei:

[xxxxx]
POP3_SERVER=
POP3_PORT=110
SMTP_SERVER=
SMTP_PORT=25
SMTP_IDENTIFY=0
LDAP_SERVER=
LDAP_PORT=389
LDAP_IDENTIFY=0
NAME=name, vorname x
TELEFON=
IDENT=benutzername  x
MAIL_PATH=\\
AUTHOR=0
USERID=
COMPANY=
DEPARTMENT=
DESKTOP=
OUTBOX_PATH=
ARCHIVE_PATH=
MAX_PRIO=3
ACCESS_LEVEL=15
PlayerViewMode=0
WorkMode=2
VOLUME=35

Vielen lieben Dank.
Heiko

Content-Key: 255170

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

Printed on: May 7, 2024 at 21:05 o'clock

Member: StefanKittel
StefanKittel Nov 18, 2014 at 14:47:10 (UTC)
Goto Top
Hallo,

ich würde das mit getprivateprofilesectionnames und VBA machen.
Sind nur 5-6 Zeilen.

Stefan
Member: colinardo
Solution colinardo Nov 18, 2014 updated at 15:19:44 (UTC)
Goto Top
Hallo Heiko,
darf man davon ausgehen das mehrere dieser Zeilen (NAME,IDENT) in der Datei in unterschiedlichen Sections vorkommen ? Dann z.B. so
$pathINI = 'C:\temp\test.ini'  
$pathCSV = 'C:\temp\export.csv'  
$export = @()
$lines = gc 'C:\temp\test.ini' | ?{$_ -match '^NAME|^IDENT'} | %{$_.Split("=")[1]}  
for($i = 0;$i -lt $lines.Length;$i +=2){
    $export += New-Object PSObject -Property @{NAME=$lines[$i];IDENT=$lines[$i+1]}
}
$export | export-csv $pathCSV -Delimiter ";" -NoTypeInformation -Encoding UTF8  
oder so
$pathINI = 'C:\temp\test.ini'  
$pathCSV = 'C:\temp\export.csv'  
$export = @()
[regex]::matches((gc $pathINI | out-string),'(?sm)^NAME=([^\r\n]*).*?^IDENT=([^\r\n]*)') | %{$export += New-Object PSObject -Property @{NAME=$_.Groups[1];IDENT=$_.Groups[2]}}  
$export | export-csv $pathCSV -Delimiter ";" -NoTypeInformation -Encoding UTF8  
Grüße Uwe
Member: pixel0815
pixel0815 Nov 18, 2014 at 15:11:27 (UTC)
Goto Top
$Path = "User.ini"
$SearchString = "IDENT=*"
$csv = "C:\NAME.csv"

$StreamReader = New-Object System.IO.StreamReader($Path)
While ($StreamReader.Endofstream -eq $False){
$LineNumber +=1
$Line=$StreamReader.ReadLine()
If($Line -like $SearchString){
"LineNumber: {0} -- {1}" -f $LineNumber,$Line
}
}

so ähnlich hatte ich das jetzt aber das was du hier wieder gezaubert hast ist genau das :-o) Echt geiL! Dankeschön
Gruß
Heiko
Member: pixel0815
pixel0815 Nov 18, 2014 at 15:26:53 (UTC)
Goto Top
Eine Frage hab ich noch.
Kann man aus dem Ergebnis das ich habe, also speziell aus dem NAME der da steht die Daten nochmal auseinanderpflücken und den Name aufsplitten in Vor und Nachname? Ein Teil aus der INI Datei sind nämlich Anwender die immer als Nachname, Vorname geschrieben werden.
Member: colinardo
Solution colinardo Nov 18, 2014, updated at Nov 19, 2014 at 07:58:58 (UTC)
Goto Top
Zitat von @pixel0815:

Eine Frage hab ich noch.
Kann man aus dem Ergebnis das ich habe, also speziell aus dem NAME der da steht die Daten nochmal auseinanderpflücken und den
Name aufsplitten in Vor und Nachname? Ein Teil aus der INI Datei sind nämlich Anwender die immer als Nachname, Vorname
geschrieben werden.
abä sischä face-wink
$pathINI = 'C:\temp\test.ini'  
$pathCSV = 'C:\temp\export.csv'  
$export = @()
$lines = (gc $pathINI) | ?{$_ -match '^NAME|^IDENT'} | %{$_.Split("=")[1]}  
for($i = 0;$i -lt $lines.Length;$i +=2){
    $parts = $lines[$i].Split(","); $name = $parts.Trim(); $vorname = ($parts[1]+'').Trim()  
    $export += New-Object PSObject -Property @{Name=$name;Vorname=$vorname;IDENT=$lines[$i+1]}
}
$export | export-csv $pathCSV -Delimiter ";" -NoTypeInformation -Encoding UTF8  
Member: pixel0815
pixel0815 Nov 19, 2014 at 07:58:54 (UTC)
Goto Top
Das ist ja genial!!! Es funktioniert.