Christoph_A4 10 Geschrieben 25. April 2013 Melden 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
Dukel 468 Geschrieben 25. April 2013 Melden 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.
magman 10 Geschrieben 25. April 2013 Melden 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
carnivore 10 Geschrieben 25. April 2013 Melden 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
Christoph_A4 10 Geschrieben 3. Mai 2013 Autor Melden 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?
PowerShellAdmin 169 Geschrieben 3. Mai 2013 Melden 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
carnivore 10 Geschrieben 4. Mai 2013 Melden 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
Christoph_A4 10 Geschrieben 14. Mai 2013 Autor Melden 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
Dukel 468 Geschrieben 14. Mai 2013 Melden Geschrieben 14. Mai 2013 Wie sieht denn dein Script bisher aus?
ducke 11 Geschrieben 14. Mai 2013 Melden 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
Necron 71 Geschrieben 14. Mai 2013 Melden 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))
Christoph_A4 10 Geschrieben 22. Mai 2013 Autor Melden Geschrieben 22. Mai 2013 Hallo Necron, wo genau setze ich die foreach-Schleife ein/an?
Necron 71 Geschrieben 22. Mai 2013 Melden 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.
Christoph_A4 10 Geschrieben 22. Mai 2013 Autor Melden Geschrieben 22. Mai 2013 Super, vielen vielen Dank euch allen, funktioniert.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden