Jump to content

Codebeispiele + Erklärungen für foreach


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

}
}

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

:)

Link zu diesem Kommentar

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

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...