Christoph_A4 10 Geschrieben 25. April 2013 Melden Teilen Geschrieben 25. April 2013 (bearbeitet) Hallo, ich hoffe die Frage erklärt sich anhand der Überschrift. Ein wenig detaillierter anhand eines simplen Beispiels: Ich habe eine text-datei erstellt mit dem Inhalt {OwnerGroup=T400S891;OwnerNode=S400G257} Mein Ziel ist es, aus "T400S891" und aus "S400G257" jeweils eine Variablen zu definieren. Mein Ansatz: Lies mir die Text-Datei aus und schreibe mir alles, was zwischen "=" und ";" steht, in eine Variable. Das wäre dann T400S891. Für die zweite Variable: Lies mir die Text-Datei aus und schreibe mir alles, was zwischen "=" und "}" steht, in eine Variable. Das wäre dann S400G257. Wie könnte ich das umsetzen? Vielen Dank im Voraus! Grüße bearbeitet 25. April 2013 von Christoph_A4 Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 25. April 2013 Melden Teilen Geschrieben 25. April 2013 Für Text lesen schaut die get-content an. Für Text schreiben Add-Content, Set-Content und Out-File. Für Strings parsen bietet sich Split oder Substring in Verbindung mit IndexOf an. Fang einfach mal an und wenn du nicht weiter kommst dann melde dich nochmal. Zitieren Link zu diesem Kommentar
magman 10 Geschrieben 25. April 2013 Melden Teilen Geschrieben 25. April 2013 Hi hier mal ein Beispiel anhand deines Ansatzes $text = '{OwnerGroup=T400S891;OwnerNode=S400G257}' $muster1 = 'OwnerGroup=(.+?);' $muster2 = 'OwnerNode=(.+?)}' if ($text -match $muster1) { $matches[0] } if ($text -match $muster2) { $matches[0] } Vielleicht hilft dir das ja schon gruß Martin Zitieren Link zu diesem Kommentar
carnivore 10 Geschrieben 25. April 2013 Melden Teilen Geschrieben 25. April 2013 (bearbeitet) Hi, so funktioniert es: Function GetGroupNode{ Param([Parameter(ValueFromPipeline = $true)] $myString) $myString = $myString.Split("=") $Var1 = $(($myString[1].split(";"))[0]) $Var2= $myString[2].Replace("}","") $Var1,$Var2 } $Input = "{OwnerGroup=T400S891;OwnerNode=S400G257}"$Output = $Input | GetGroupNode$Output[0]$Output[1] #Ausgabe T400S891S400G257 bearbeitet 25. April 2013 von carnivore Zitieren Link zu diesem Kommentar
Christoph_A4 10 Geschrieben 3. Mai 2013 Autor Melden Teilen Geschrieben 3. Mai 2013 Super. Danke schonmal an alle, die hier geantwortet haben. Carnivore, das passt soweit sehr gut, es kommt allerdings erschwerend dazu, dass der $Input ({OwnerGroup=T400S891;OwnerNode=S400G257}) aus einer txt-Datei entstammt und dort mehrere dieser Zeilen vorhanden sind, sprich bspw.: {OwnerGroup=T400S891;OwnerNode=S400G257} {OwnerGroup=T400S394;OwnerNode=S400G256} {OwnerGroup=T400S542;OwnerNode=S400G255} Ich bräuchte für diesen Fall quasi alle 6 Variablen. Wie kann man das lösen, wüßtest du einen Ansatz? Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 3. Mai 2013 Melden Teilen Geschrieben 3. Mai 2013 Array, Hashtable, Eigenes PsObject. Zitieren Link zu diesem Kommentar
PowerShellAdmin 169 Geschrieben 3. Mai 2013 Melden Teilen Geschrieben 3. Mai 2013 (bearbeitet) Arraylist, Eigenes PsObject Der Skript ist nur ein logisches Beispiel. Du initialisierst einmalig die Arrayliste. Anschließend befüllst du die Liste mit den einzelnen Zeilen in einer Foreach Schleife.Dafür wird in jedem Schleifendurchlauf ein Objekt initialisiert und der Liste hinzugefügt.Der Code ist unvollständig und mehr ein logisches Biespiel - aber das kriegst du ja hin :) #initialisiert die Arrayliste $txt_lines=New-Object System.Collections.ArrayList foreach($line in $txt) { #initialisiert ein PS Object $line= New-Object PSObject -Property @{ OwnerGroup=$line.ownergroup OwnerNode=$line.ownernode } #fügt die Zeile zur Liste hinzu $txt_lines+=$line } bearbeitet 3. Mai 2013 von PowerShellAdmin Zitieren Link zu diesem Kommentar
carnivore 10 Geschrieben 4. Mai 2013 Melden Teilen Geschrieben 4. Mai 2013 (bearbeitet) Function GetGroupNode{ Param([Parameter(ValueFromPipeline = $true)] $myString) $myString = $myString.Split("=") $Var1 = $(($myString[1].split(";"))[0]) $Var2= $myString[2].Replace("}","") $Var1,$Var2 }#End Function GetGroupNode $Path = "c:\temp\myInputFile.txt" Get-Content -Path $Path | Foreach{ $Output = $_ | GetGroupNode } "$($Output[0]) $($Output[1])" So in etwa würde ichs umsetzen: bearbeitet 4. Mai 2013 von carnivore Zitieren Link zu diesem Kommentar
Christoph_A4 10 Geschrieben 14. Mai 2013 Autor Melden Teilen Geschrieben 14. Mai 2013 carnivore: Die Ansätze sind schon sehr vielversprechend. Ich muss gestehen, ich bin hiermit an einem Punkt angelangt, wo ich nicht mehr weiterkomme. Mein Problem mit diesem Ansatz ist, dass ich jeweils nur zwei Variablen geliefert bekomme. Aus den schon o.g. txt-file-Inhalt... {OwnerGroup=T400S891;OwnerNode=S400G257} {OwnerGroup=T400S394;OwnerNode=S400G256} {OwnerGroup=T400S542;OwnerNode=S400G255} ....müsste ich quasi auch 6 Variablen geliefert bekommen. T400S891 S400G257 T400S394 S400G256 T400S542 S400G255 Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 14. Mai 2013 Melden Teilen Geschrieben 14. Mai 2013 Wie sieht denn dein Script bisher aus? Zitieren Link zu diesem Kommentar
ducke 11 Geschrieben 14. Mai 2013 Melden Teilen Geschrieben 14. Mai 2013 Um dich weiter zu verwirren noch eine Methode via regex $test = Get-Content C:\temp\ownertest.txt #regex string $regex = [regex]"[A-Z]\d{3}[A-Z]\d{3}" #save regex results in variable $result = $regex.Matches($test).value #Create empty Array $output = @() $result | %{ #Create PSObject with owner Property $ret = "" | select owner #Save Pipeoutput in Custom Object $ret.owner = $_ #Save in Array $output += $ret } $output Zitieren Link zu diesem Kommentar
Necron 71 Geschrieben 14. Mai 2013 Melden Teilen Geschrieben 14. Mai 2013 Sieht etwas kompliziert aus, macht aber was es soll. Das ganze dann natürlich nach dem Einlesen in eine foreach packen und weiterbearbeiten: $VarOrigin="{OwnerGroup=T400S891;OwnerNode=S400G257}"$FirstEqual=$VarOrigin.IndexOf("=")$SecondEqual=$VarOrigin.IndexOf("=",$FirstEqual+1)$FirstSemicolon=$VarOrigin.IndexOf(";")$LastCurlyBracket=$VarOrigin.IndexOf("}")$Var1=$VarOrigin.Substring($FirstEqual+1,$FirstSemicolon - ($FirstEqual + 1))$Var2=$VarOrigin.Substring($SecondEqual+1,$LastCurlyBracket - ($SecondEqual +1)) Zitieren Link zu diesem Kommentar
Christoph_A4 10 Geschrieben 22. Mai 2013 Autor Melden Teilen Geschrieben 22. Mai 2013 Hallo Necron, wo genau setze ich die foreach-Schleife ein/an? Zitieren Link zu diesem Kommentar
Necron 71 Geschrieben 22. Mai 2013 Melden Teilen Geschrieben 22. Mai 2013 $VarOriginial=Get-Content -Path C:\Textdatei.txt foreach($VarOrigin in $VarOriginal){ $FirstEqual=$VarOrigin.IndexOf("=") $SecondEqual=$VarOrigin.IndexOf("=",$FirstEqual+1) $FirstSemicolon=$VarOrigin.IndexOf(";") $LastCurlyBracket=$VarOrigin.IndexOf("}") $Var1=$VarOrigin.Substring($FirstEqual+1,$FirstSemicolon - ($FirstEqual + 1)) $Var2=$VarOrigin.Substring($SecondEqual+1,$LastCurlyBracket - ($SecondEqual +1)) } Das nur als Beispiel. Du musst natürlich $Var1 und $Var2 entweder wieder irgendwo hinschreiben lassen oder direkt in der foreach Schleife weiter verarbeiten. Zitieren Link zu diesem Kommentar
Christoph_A4 10 Geschrieben 22. Mai 2013 Autor Melden Teilen Geschrieben 22. Mai 2013 Super, vielen vielen Dank euch allen, funktioniert. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.