Sunny61 807 Geschrieben 13. Februar 2019 Melden Teilen Geschrieben 13. Februar 2019 (bearbeitet) Hallo zusammen, ich hab eine größere PS die u.a. aus einer CSV ein paar Spalten ausliest. Aus der großen PS rufe ich den Import in einer eigenen Function auf: $LehrgangNo = Lehrgang($PathToFile2) Write-Host $LehrgangNo #Und so weiter und so weiter Function Lehrgang([string]$Path) { #Diese Funktion liest den Namen, das Datum von und bis des Lehrganges aus, dessen User importiert werden sollen. $int = 0 import-csv -path $Path -Delimiter ';' | foreach { $int = $int + 1 $Von = $_."von" $Bis = $_."bis" #Ausstieg bei zweiter Zeile. if($int -eq 2) { #Rückgabe an die aufrufende Variable. return "$Lehrgang+$V+$B" } #Lehrgangsbezeichnung, Leerzeichen entfernen $Lehrgang = $_.Lehrgangsnummer $Lehrgang= $Lehrgang.Replace(" ","") #Von Datum, Jahr, Monat und Tag extrahieren $VonJahr = $Von.substring($von.Length-4) $VonMonat = $von.Substring(3,2) $VonTag = $Von.Substring(0,2) #Bis Datum, Jahr, Monat und Tag extrahieren $BisJahr = $Bis.substring($Bis.Length-4) $BisMonat = $Bis.Substring(3,2) $BisTag = $Bis.Substring(0,2) #Zusammensetzen. $V = $VonJahr+$VonMonat+$VonTag $B = $BisJahr+$BisMonat+$BisTag }#import-csv -path $Path -Delimiter ';'| foreach { return $Lehrgang+$V+$B }#ENDE Function Lehrgang([string]$Path) { Ich möchte die foreach Schleife frühzeitig verlassen, trotz Return xxx geht es munter bis zum Schluss weiter. Hat jemand einen Tipp? Vielen Dank schon im Voraus. bearbeitet 13. Februar 2019 von Sunny61 Zitieren Link zu diesem Kommentar
tesso 375 Geschrieben 13. Februar 2019 Melden Teilen Geschrieben 13. Februar 2019 Schau hier: https://stackoverflow.com/questions/10277994/how-to-exit-from-foreach-object-in-powershell Zitieren Link zu diesem Kommentar
Sunny61 807 Geschrieben 13. Februar 2019 Autor Melden Teilen Geschrieben 13. Februar 2019 Sorry, hätte ich schreiben sollen. Hab ich schon so umgesetzt, sieht man auch im Code, leider kein Erfolg. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 13. Februar 2019 Melden Teilen Geschrieben 13. Februar 2019 (bearbeitet) ... schon mit break versucht? Vielleicht gibt es ja auch einen besseren Weg. Eine Schleife vorzeitig zu verlassen, fühlt sich für mich immer wie Koitus Interruptus an .... ich versuch's zu vermeiden. Wenn Du sowieso nur die ersten beiden Zeilen verarbeiten möchtest, kannst Du doch mit Select-Object -First 2 prima die Ausgabe darauf einschränken und brauchst nicht hinterher solche Klimmzüge machen. bearbeitet 13. Februar 2019 von BOfH_666 Zitieren Link zu diesem Kommentar
tesso 375 Geschrieben 13. Februar 2019 Melden Teilen Geschrieben 13. Februar 2019 (bearbeitet) Im empfohlenen Link ist "break" beschrieben. In deinem Code sehe ich nur "return" Warum liest du immer nur zwei Zeilen und brichst dann ab? Warum nutzt du das Datum nicht als Datum, sondern baust kompliziert Texte zusammen? Kannst du mal die ersten paar Zeilen aus der csv zeigen? Irgendwie fehlt mir die Idee was du überhaupt damit anstellen willst. bearbeitet 13. Februar 2019 von tesso 1 Zitieren Link zu diesem Kommentar
Sunny61 807 Geschrieben 13. Februar 2019 Autor Melden Teilen Geschrieben 13. Februar 2019 (bearbeitet) Danke für die Antworten. ;) @BOfH_666 Break hatte ich auch vorher schon versucht, jetzt nochmal. Dabei bleibt der Prozess einfach nur stehen, sonst nichts. An welcher Stelle müsste das Select-Object -First 2 dann hin? Aus https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-object?view=powershell-6 werde ich nicht schlau. In der CSV sind u.a Usernamen und Lehrgangsnummern, von und bis Datum. Ich brauche daraus die Lehrgangsnummer und mit dem formatierten Datum wird der Name einer OU erstellt. Die OU wird erstellt, die User in der OU angelegt. Das ist der Sinn dahinter. Leider werden die CSV noch manuell ergänzt, dann ist im Feld Lehrgangsnummer nichts drin oder es steht etwas unbrauchbares drin. Deshalb reichen mir die ersten 1 od. 2 Zeilen aus. Ich schau mir jeden anderen Weg sehr gerne an. Die OU heißt dann z.B: L47112019022320190427 Deshalb wird das Datum so kompliziert formatiert. bearbeitet 13. Februar 2019 von Sunny61 Zitieren Link zu diesem Kommentar
Beste Lösung BOfH_666 577 Geschrieben 13. Februar 2019 Beste Lösung Melden Teilen Geschrieben 13. Februar 2019 (bearbeitet) Oooops ... ich muss zu meiner Schande gestehen, dass ich aufgrund der Fragestellung gar nicht genau hingeschaut hatte. Mit break kann man, wie man auch in der Hilfe nachlesen kann, nur aus Loops oder Swich-Statements ausbrechen (also For, While, Do oder Foreach - Loops). Foreach-Object gehört da nicht dazu ... genau deswegen plädiere ich immer dafür in Scripten so ausführlich wie möglich zu coden und Aliasse auf jeden Fall zu vermeiden. Aber wie schon erwähnt ... es gibt eine andere Lösung: Import-Csv -Path $Path -Delimiter ';' | Select-Object -First 2 ... wirft nur die ersten beiden Zeilen der CSV-Datei aus. Davon abgesehen, bin ich auch bei tesso. Der Code sieht umständlich aus. Vielleicht lässt Du uns mal ein paar Zeilen Deiner CSV-Datei sehen (natürllich um sensible Informationen bereinigt) und erklärst kurz, was das eigentliche Ziel ist. Da kann man bestimmt was verbessern. Edit: Noch vergessen - Thema Datum formatieren: Get-Date -Format 'yyyyMMdd' bearbeitet 13. Februar 2019 von BOfH_666 Zitieren Link zu diesem Kommentar
Sunny61 807 Geschrieben 13. Februar 2019 Autor Melden Teilen Geschrieben 13. Februar 2019 (bearbeitet) vor einer Stunde schrieb BOfH_666: Aber wie schon erwähnt ... es gibt eine andere Lösung: Import-Csv -Path $Path -Delimiter ';' | Select-Object -First 2 ... wirft nur die ersten beiden Zeilen der CSV-Datei aus. Danke, das probier ich morgen gleich mal aus. Jetzt hab ich es auch verstanden. ;) vor einer Stunde schrieb BOfH_666: Davon abgesehen, bin ich auch bei Sunny61. Der Code sieht umständlich aus. Vielleicht lässt Du uns mal ein paar Zeilen Deiner CSV-Datei sehen (natürllich um sensible Informationen bereinigt) und erklärst kurz, was das eigentliche Ziel ist. Da kann man bestimmt was verbessern. Edit: Noch vergessen - Thema Datum formatieren: Get-Date -Format 'yyyyMMdd' Was ist an der ForEach Schleife umständlich? An dieser Stelle reicht mir die Nummer und das Datum von und bis völlig. Anschließend wird die OU angelegt, im nächsten Schritt dann die User in der OU. Das gezeigte ist nur ein kleiner Teil des Ganzen. ;) Außerdem ist die Schleife morgen vermutlich Geschichte. In der CSV steht ein Datum, das formatiere ich um, das aktuelle Datum brauch ich nicht. bearbeitet 13. Februar 2019 von Sunny61 Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 13. Februar 2019 Melden Teilen Geschrieben 13. Februar 2019 (bearbeitet) ... ich meinte, dass ich bei tesso bin ... Zitat das aktuelle Datum brauch ich nicht. Das war doch nur ein Beispiel ... natürlich nimmst Du das Datum aus der CSV-Datei ... Du kannst jedes beliebige Datum benutzen ... z.B. so $BeipsielDatumAusDerCSVDatei = '31.12.2018' Get-Date -Date $BeipsielDatumAusDerCSVDatei -Format 'yyyyMMdd' Das meinte ich mit "umständlich" ... Du brauchst viele Zeilen Code und könntest vieles stark verkürzen ... statt $Lehrgang = $_.Lehrgangsnummer $Lehrgang= $Lehrgang.Replace(" ","") ... genügt z.B. auch eine Zeile ... $Lehrgang = $_.Lehrgangsnummer -replace '\s*' ... Musst Du das Datum für jeden einzelenen User zusammenbauen oder gilt das Datum für alle User eines Lehrgangs? bearbeitet 13. Februar 2019 von BOfH_666 Zitieren Link zu diesem Kommentar
daabm 1.366 Geschrieben 13. Februar 2019 Melden Teilen Geschrieben 13. Februar 2019 Olaf, laß ihm doch die Chance, sich auf einer Lernkurve zu verbessern. Ich hab vor ner Woche auch Code von mir angeschaut, den ich vor 2 Jahren produziert habe. Oha.... Splatting war mir damals noch fremd, also Backticks :-( Nur ein Beispiel... Zitieren Link zu diesem Kommentar
Sunny61 807 Geschrieben 13. Februar 2019 Autor Melden Teilen Geschrieben 13. Februar 2019 @BOfH_666 Danke, da kann ich morgen gleich kürzen. ;) Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 13. Februar 2019 Melden Teilen Geschrieben 13. Februar 2019 vor einer Stunde schrieb daabm: Olaf, laß ihm doch die Chance, sich auf einer Lernkurve zu verbessern. Na darum ging's mir doch ... war ich zu subtil? vor einer Stunde schrieb daabm: Ich hab vor ner Woche auch Code von mir angeschaut, den ich vor 2 Jahren produziert habe. Oha.... Splatting war mir damals noch fremd, also Backticks :-( Nur ein Beispiel... Das kenn' ich. Wenn ich mir meine ganz alten Sachen angucke, denke ich mir manchmal nur "Gott sei Dank sieht das niemand außer mir selbst" Zitieren Link zu diesem Kommentar
Sunny61 807 Geschrieben 14. Februar 2019 Autor Melden Teilen Geschrieben 14. Februar 2019 @BOfH_666 Vielen Dank nochmal, das Select-Object brachte den gewünschten Effekt. :) Und -Replace kannte ich auch noch nicht. 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.