schreckinger 10 Geschrieben 15. März 2012 Melden Teilen Geschrieben 15. März 2012 Hallo Gemeinde Meine Frage: Besitzt jemand von euch einfach Codebeispiele für die Foreach Schleife + kleiner Erklräung Wäre sehr dankbar dafür daher ich noch nicht dahinter gekommen bin wie diese Schleife funktioniert. Danke lg schreckinger Zitieren Link zu diesem Kommentar
PowerShellAdmin 169 Geschrieben 15. März 2012 Melden Teilen Geschrieben 15. März 2012 foreach($object in $ADuser) { $object.samaccountname } $ADUser ist eine Arrayliste die alle AD Benutzer enthält. Die Foreachschleife arbeitet jetzt bei jedem Durchlauf ein Benutzer - bis EOF (bis Ende ist)- durch. Der Inhalt wird in das Objekt $object geladen. Im Schleifenkörper gebe ich den jeweiligen Samaccountname aus Hinweis: $object wird bei jedem Durchlauf neu generiert und verfällt danach. Möchte man sich z.B. Daten raussuchen und aufbereiten, dann muss man diese wieder z.B. in eine Arrayliste oder anderes Listenobjekt schreiben. about_Foreach - PowerShell Ich sage das nur ungern, aber da gibt es zuhauf Informationen, ein wenig eigen Engagement kann man schon erwarten oder ? :) Zitieren Link zu diesem Kommentar
schreckinger 10 Geschrieben 15. März 2012 Autor Melden Teilen Geschrieben 15. März 2012 Hallo danke erstmals für deine Antwort. Ja der Fleiß fehlt sicher nicht, bin die ganze Zeit daran am Lernen von dieser Powershell. Aber zur Info ich komme aus dem Linux Bereich / Monitoring und daurch ich einen Jobwechsel machte, müss ich jetzt Powershell können. Aber mit den erklärungen aus dem Netz ist es halt immer so eine Sache. Bin wirklich dankbar wenn du dir ein wenig Zeit nimmst und mir die wichtigsten Dinge beibringst. Wäre auch bereit dich dafür zu entschädigen. In Form von Hilfe bei anderen Dingen oder mit einer Paysafe Karte. :) Folgendes. Ich soll nämlich ein Script schreiben: ich soll einen Odrner der auf C:\Filetyp liegt mit einem Ordner auf \\fileserver01\filetyp abgleichen. Die Dateien sollen nach folgenden Punkten ausgewählt werden. Also nur *.txt *.doc *.ppt sollen abgelichen werden. Dann sollen alle Datei von C:\filetyp auf den Server kopiert werden. Aber nur die Dateien die dem Fileserver fehlen $a = dir -Path C:\\filetyp # In der Variablen a steht jetzt der Inhalt vom Ordner $b = dir -Path \\fileserver\filetyp # In der Variablen b steht jetzt der Inhalt vom Netzlaufwerk Compare-Object -ReferenceObject $a -DifferenceObject $b | Format-Table #diff -includeequal -excludedifferent -ReferenceObject ($a -r) -DifferenceObject ($b -r) $src = $a $dst = $b move-item -recurse $src $dst Nur so wie ich mir das gedacht habe funktioniert das nicht. Aufjedenfall wäre ich für Hilfe sehr dankbar. Hoffentlich ist es verständlich geschrieben Lg Schreckinger Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 15. März 2012 Melden Teilen Geschrieben 15. März 2012 Mache doch bei deinem Urspungsthread weiter: http://www.mcseboard.de/windows-forum-scripting-71/verschiedene-filetypen-vergleichen-verschiedenen-laufwerken-184912.html Vielleicht ist es auch sinnvoller mit etwas abstrakten und keinem konkreten Problem anzufangen. Willst du primär Powershell lernen oder dein Problem lösen? Zitieren Link zu diesem Kommentar
schreckinger 10 Geschrieben 15. März 2012 Autor Melden Teilen Geschrieben 15. März 2012 Hallo Ich möchte Powershell können / verstehen / nutzen. Aber mein Primäresziel ist es das Problem so schnell wie möglich zu lösen. Ich glaube wenn ich ein dieses Beispiel gelöst ist, werde ich sicher mehr verstehen, daher ich dann mal sehe wie genau der Abgleich funktioniert. Das Problem daran ist das mein Arbeitsgeber das Script schon benötigt und ich mich persönlich ein bisschen aus dem Fenster gelegt habe und ihm zuversichert habe das ich das Script bis am Freitag habe. Mir geht einfach noch der Zusammen hang ein bisschen ab. Oder besser gesagt die Richtige schreibweise. ich glaube mein Script unten im Anhang ist schon mal nichtso flasch ? Das mit neuen Thread dachte ich ist normal das man wieder einen neuen anlegt ? Sorry wird nicht wieder vorkommen... Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 15. März 2012 Melden Teilen Geschrieben 15. März 2012 Wenn's ums gleiche Thema geht (dieses Script) kann man das ruhig im selben Thread machen. Um Tipps zum Powershell lernen oder ähnliches machen kannst du gerne einen neuen Thread aufmachen. Ich würde das Script folgendermaßen machen: #Quelle $src = "C:\etc" #Ziel $dst = "D:\temp\etc" #Schleife über Dateisystem. -iclude definiert die Dateitypen, die durchsucht gehören foreach($file in (Get-ChildItem $src -Recurse -include *.xml,*.exe)){ #Dateiname im Ziel $dstfile = $file.FullName.replace("$src","$dst") #Ordner im Ziel $dstfolder = $dstfile.split('\')[0..($dstfile.split('\').length-2)] -join '\' #Testen ob diese Datei NICHT existiert if(!(test-path $dstfile)){ #Testen ob ein Ordner existiert if(!(test-path $dstfolder)){ #Wenn er nicht existiert, dann an anlegen new-item $dstfolder -type directory -recurse } #Wenn die Datei nicht existiert von der Quelle kopieren copy-item $file.FullName $dstfolder } } Zitieren Link zu diesem Kommentar
schreckinger 10 Geschrieben 15. März 2012 Autor Melden Teilen Geschrieben 15. März 2012 Okay danke, i probier das gleich mal aus mit deinem Script. Und nohcmals ein Fettes DANKE genau so erklärt das ich es Verstehen kann :D DANKE DANKE Aber ich bin sehr Wissen gierig :D Frage: #Ordner im Ziel $dstfolder = $dstfile.split('\')[0..($dstfile.split('\').length-2)] -join '\' was macht dieser Befehl ? Als erster defierst du dir die Varaible dstfolder und dann müss ich ehrlich sagen Bahnhof ? machst du ihr eine vergleich oder wie ? Und wie gesagt besten dank;) Zitieren Link zu diesem Kommentar
schreckinger 10 Geschrieben 15. März 2012 Autor Melden Teilen Geschrieben 15. März 2012 Ein Problem hat sich mir noch aufgtan. Also beim Befehl: if(!(test-path $dstfile)) spring er mir immer raus ? Frage für was steht das ! in der ersten Klammer.... danke Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 15. März 2012 Melden Teilen Geschrieben 15. März 2012 ! heißt "nicht". D.h. wenn der Pfad NICHT existiert, dann soll er das im If Zweig machen. Das Code Stück $dstfile.split('\')[0..($dstfile.split('\').length-2)] -join '\' entfernt aus dem kompletten Pfad mit Dateinamen den Dateinamen so dass nur noch der Pfad übrig bleibt. Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 15. März 2012 Melden Teilen Geschrieben 15. März 2012 Das Code Stück $dstfile.split('\')[0..($dstfile.split('\').length-2)] -join '\' entfernt aus dem kompletten Pfad mit Dateinamen den Dateinamen so dass nur noch der Pfad übrig bleibt. ginge auch mit "split-path -parent" Split-Path blub Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 15. März 2012 Melden Teilen Geschrieben 15. März 2012 Stimmt. Damit geht das auch. Split-Path kannte ich bisher noch nicht. Zitieren Link zu diesem Kommentar
schreckinger 10 Geschrieben 15. März 2012 Autor Melden Teilen Geschrieben 15. März 2012 was ich noch nicht daran verstehe #Quelle $src = "C:\Benutzer\filetyp" #Ziel $dst = "\\fileserver01\filetyp" #Schleife über Dateisystem. foreach($file in (Get-ChildItem $src -Recurse -include *.txt,*.doc,*.ppt)){ #Dateiname im Ziel $dstfile = $file.FullName.replace("$src","$dst") #Ordner im Ziel $dstfolder = $dstfile.split('\')[0..($dstfile.split('\').length-2)] -join '\' #Testen ob diese Datei NICHT existiert if(!(test-path $dstfile)){ #Testen ob ein Ordner existiert if(!(test-path $dstfolder)){ #Wenn er nicht existiert, dann an anlegen new-item $dstfolder -type directory -recurse } #Wenn die Datei nicht existiert von der Quelle kopieren copy-item $file.FullName $dstfolder } } aber ab der ersten if schleife bliebt er mir hängen ? Also ich verwende den PowerGUI Skript Editor dafür beim Schritt-weißen ausführe sehe ich es eine weiter Frage stellt sich mir ? Wie kann ich den am besten einen Fehlercode ermittelung einbauen sprich das er mir genau mit Protokoliert was er macht ? Danke nochmals :) Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 15. März 2012 Melden Teilen Geschrieben 15. März 2012 Was meinst du mit bleibt hängen? Kommt in der Konsole eine Fehlermeldung? Zitieren Link zu diesem Kommentar
schreckinger 10 Geschrieben 15. März 2012 Autor Melden Teilen Geschrieben 15. März 2012 Hallo ja er spring mir ab der ersten if raus. und kopiert wird auch nix ? Obwohl ich die richten Quelle und Soruce ja angebe ? Danke nochmals Zitieren Link zu diesem Kommentar
schreckinger 10 Geschrieben 15. März 2012 Autor Melden Teilen Geschrieben 15. März 2012 foreach($file in (Get-ChildItem $src -Recurse -include *.txt,*.doc,*.ppt)){ $dstfile = $file.FullName.replace("$src","$dst") if(!(Test-Path $dstfile)) copy-item $file.FullName $dstfolder } Missing statement block after if ( condition ). At line:4 char:1 + <<<< copy-item $file.FullName $dstfolder + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : MissingStatementBlock Die Meldung bekomme ich wenn ich es dirket in der Powershell Konsole ausprobiere Danke nochmals :) 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.