calzoni83
Goto Top

Powershell Ordner auslesen

Hallo erstmal,

ich bin anfänger im Bereich Powershell scripting und bräuchte hilfe für ein Powershell Script.

Ich habe mehrere Ordner, wo auch mehrere Unterordner existieren. Ich brauche von jedem Ordner ein bestimmten Unterordner der ausgelesen werden soll.

Beispiel
Ordner1 -> xml Ordner (nur den Ordner XML brauche ich)
-> x Ordner
-> y Ordner
-> z Ordner

Ordner2 -> xml Ordner (nur den Ordner XML brauche ich)
-> x Ordner
-> y Ordner
-> z Ordner

Ein Script habe ich soweit, nur das Problem ist, das das Script alle Unterordner ausliest.

Vielen dank

gruß calzoni

Content-Key: 197421

Url: https://administrator.de/contentid/197421

Printed on: April 23, 2024 at 14:04 o'clock

Mitglied: 106543
106543 Jan 22, 2013 updated at 09:43:17 (UTC)
Goto Top
Hi

if not $ORDNERNAME = "XML" then goto [nächten Ordner auslesen] else write-host $ORDNERNAME  

Grüße
Exzellius
Member: calzoni83
calzoni83 Jan 22, 2013 updated at 10:05:34 (UTC)
Goto Top
danke für die schnelle Antwort.
Ich verstehe das leider nicht ganz. Ich habe so 1500 Ordner (wo jeder Ordner ein Unterordner namens xml hat und diesen brauche ich nur), woher weis er wo die Ordner liegen??? Muss ich da den $Path angeben oder wie funktioniert das???

Hier ist mein Script und wo füge ich die Bedingung ein ???

Set-StrictMode -Version "2.0"
Clear-Host

#RootPath
$Path = "C:\Users\lc\Documents\test"
$Folders = (Get-ChildItem $path)
$myfolders = Foreach($Folder in $Folders){
If($Folder.PSIsContainer -eq $True){
New-Object -TypeName Psobject -Property @{
Name = $Folder.FullName
#CountFiles = ((gci $Folder.Fullname -recurse | Where {$_.PSIsContainer -eq $False}) |Measure-Object).Count
}
}
}

#Ausgabe1
#$myFolders | sort SumFiles -descending | ForEach{
  1. "{0} {1:0.00} MB {2}" -f $($_.name),$($_.size),$($_.Sumfiles)
#}

#Ausgabe2
$myFolders | sort Name | ft -auto

#Ausgabe3 (csv-File)
$myFolders | sort SumFiles -descending | export-csv "C:\Users\LC\Documents\test1.csv" -delimiter ";"

dank nochmals

gruß calzoni
Mitglied: 106543
106543 Jan 22, 2013 at 10:16:38 (UTC)
Goto Top
Hi calzoni,

1. deine Fragezeichentaste scheint kaputt zu sein face-smile
2. hier im Forum (eig. in jedem Forum) gibt es sogenannte Code-Tags
siehe:
Mit < code >Quellcode< /code > kann ein beliebiger Quellcode in richtiger Formatierung (Abstände, Einrückungen usw.) angezeigt werden.

3. zu deinem Problem, ich meine, dass in der Varibale $Folder dein aktuell ausgelesener Ordner drinsteht von daher:
Set-StrictMode -Version "2.0"  
Clear-Host

#RootPath
$Path = "C:\Users\lc\Documents\test"  
$Folders = (Get-ChildItem $path)
$myfolders = Foreach($Folder in $Folders){
If($Folder.PSIsContainer -eq $True){

if not $Folder = "XML" then goto Sprungmarke  

New-Object -TypeName Psobject -Property @{
Name = $Folder.FullName
#CountFiles = ((gci $Folder.Fullname -recurse | Where {$_.PSIsContainer -eq $False}) |Measure-Object).Count
}
:Sprungmarke
}
}

#Ausgabe1
#$myFolders | sort SumFiles -descending | ForEach{

1."{0} {1:0.00} MB {2}" -f $($_.name),$($_.size),$($_.Sumfiles)  
#}

#Ausgabe2
$myFolders | sort Name | ft -auto

#Ausgabe3 (csv-File)
$myFolders | sort SumFiles -descending | export-csv "C:\Users\LC\Documents\test1.csv" -delimiter ";"  
alles ungetestet, da ich grade keine Powershel-Konsole da hab face-smile

Grüße
Exzellius
Member: calzoni83
calzoni83 Jan 22, 2013 at 10:37:46 (UTC)
Goto Top
Hi,
Der Pfad weg ist ja C:\Users\lc\Documents\test, dort liegen die ganzen Ordner (Ordner1, Ordner2, Ordner3) drinne und von denen die Unterordner namens XML sollen ausgelesen werden.
So wie ich das verstehe schaut er doch nach den XML Ordner nur unter C:\Users\lc\Documents\test oder?

danke nochmals für die Hilfe

gruß Calzoni
Mitglied: 106543
106543 Jan 22, 2013 at 10:46:32 (UTC)
Goto Top
Hi,

soweit richtig er sucht in diesem Pfad und geht alle Ordner durch.
Wenn er jetzt einen Ordner findet der NICHT XML heißt, dann springt er ans Ende der Schleife und nimmt sich den nächsten Ordner. Wenn er einen Ordner findet, der XML heißt, dann führt er deinen ganzen Quellcode aus.

Grüße
Exzellius
Member: calzoni83
calzoni83 Jan 23, 2013 at 07:07:25 (UTC)
Goto Top
Guten Morgen,

Ich komme damit leider nicht weiter

Set-StrictMode -Version "2.0"
Clear-Host

#RootPath
$Path = "C:\Users\lc\Documents\test"
$Folders = (Get-ChildItem $path)
$myfolders = Foreach($Folder in $Folders){
If($Folder.PSIsContainer -eq $True){

if not $Folder = "xml" then goto Sprungmarke

New-Object -TypeName Psobject -Property @{
Name = $Folder.FullName
CountFiles = ((gci $Folder.Fullname -recurse | Where {$_.PSIsContainer -eq $False}) |Measure-Object).Count
}
}
:Sprungmarke
}
}
#Ausgabe1
#$myFolders | sort SumFiles -descending | ForEach{
  1. "{0} {1:0.00} MB {2}" -f $($_.name),$($_.size),$($_.Sumfiles)
#}

#Ausgabe2
$myFolders | sort Name | ft -auto

#Ausgabe3 (csv-File)
$myFolders | sort SumFiles -descending | export-csv "C:\Users\lc\Documents\test0.csv" -delimiter ";"

Ich bekomme immer diesen fehler

Fehlende "(" nach "if" in der if-Anweisung.
Bei C:\Users\lc\Documents\Ordner auslese script.ps1:10 Zeichen:6

back-to-topif <<<< not $Folder = "xml" then goto Sprungmarke

+ CategoryInfo : ParserError: (OpenParenToken:TokenId) , ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingEndParenthesisInIfStatement

Kann das sein, das ich nicht in eine IF schleife noch ein If einsetzen kann?

danke
gruß calzoni
Mitglied: 106543
106543 Jan 23, 2013 at 07:15:16 (UTC)
Goto Top
Hi calzoni,

doch geht ;) allerdings ist es schon ne Weile her, dass ich mit Powershell gearbeitet hab und von daher können Fehler schonmal passieren.
also
1) ich hab keine Ahnung, wie zum Teufel nochmal ne if-Selektion in Powershell ging, muss mich da iwo verschrieben haben
2) goto Sprungmarke war eher eine Verzweiflungstat, weil ich garnicht weiß ,wie Sprungmarken in Powershell verwendet werden und das soweiso schlechter Stil ist
3) verwendest du bitte Code-Tags wie oben beschrieben ?
4) hier ein neuer Versuch, probiers mal bitte aus:
Set-StrictMode -Version "2.0"  
Clear-Host

#RootPath
$Path = "C:\Users\lc\Documents\test"  
$Folders = (Get-ChildItem $path)
$myfolders = Foreach($Folder in $Folders){
If($Folder.PSIsContainer -eq $True){

if not ($Folder = "XML"){  
goto Sprungmarke
}

New-Object -TypeName Psobject -Property @{
Name = $Folder.FullName
#CountFiles = ((gci $Folder.Fullname -recurse | Where {$_.PSIsContainer -eq $False}) |Measure-Object).Count
}
:Sprungmarke
}
}

#Ausgabe1
#$myFolders | sort SumFiles -descending | ForEach{

1."{0} {1:0.00} MB {2}" -f $($_.name),$($_.size),$($_.Sumfiles)  
#}

#Ausgabe2
$myFolders | sort Name | ft -auto

#Ausgabe3 (csv-File)
$myFolders | sort SumFiles -descending | export-csv "C:\Users\LC\Documents\test1.csv" -delimiter ";"  

Viel Glück und freundliche Grüße
Exzellius
Member: calzoni83
calzoni83 Feb 01, 2013 at 07:42:20 (UTC)
Goto Top
hi,

ich habe es hinbekommen, habe einfach ein Filter gesetzt. Vielen dank nochmals für die Hilfe.

gruß calzoni