Jump to content
Melde dich an, um diesen Inhalt zu abonnieren  
schreckinger

Codebeispiele + Erklärungen für foreach

Empfohlene Beiträge

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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 ? :)

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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?

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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...

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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

}
}

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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;)

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

! 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.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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

:)

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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 :)

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
Melde dich an, um diesen Inhalt zu abonnieren  

×