PowerShell - Nach Dateigröße selektieren
Exchange 2010 Standard
Server 2008 R2 Enterprise
Hi,
ich schreibe gerade ein kleines PowerShell Skipt.
Dieses soll die Namen und Größen der Dateien aus mehreren Unterordnern ausgeben, die z.B. kleiner als 500 MB sind und diese dann samt Ordner auf ein anderes Laufwerk verschieben.
Der ganze Move-Item Vorgang folgt dann später.
Wisst ihr, wie ich hier gescheit selektieren kann?
Freue mich über jede Rückmeldung.
Grüße
Tray
Server 2008 R2 Enterprise
Hi,
ich schreibe gerade ein kleines PowerShell Skipt.
Dieses soll die Namen und Größen der Dateien aus mehreren Unterordnern ausgeben, die z.B. kleiner als 500 MB sind und diese dann samt Ordner auf ein anderes Laufwerk verschieben.
$pfad=Get-ChildItem *.* -Recurse | select-object name, length | format-list | where name -lt 524288000
Der ganze Move-Item Vorgang folgt dann später.
Wisst ihr, wie ich hier gescheit selektieren kann?
Freue mich über jede Rückmeldung.
Grüße
Tray
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 146449
Url: https://administrator.de/contentid/146449
Ausgedruckt am: 08.11.2024 um 09:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo Tray,
Statt Write-Host bau halt deinen Befehl zusammen.
Gruß
LotPings
Edit: noch ein paar Anmerkungen
Wenn du in der Pipe noch mehr anstellen willst, kannst du das z.Bsp. so machen:
gci *.* -recurse | foreach {if (!$_.psiscontainer -And $_.length -lt '10000') {write-host $_.length $_.fullname $_.PSDrive $_.DirectoryName.substring(2) $_.BaseName $_.Extension} }
Gruß
LotPings
Edit: noch ein paar Anmerkungen
- Damit der gci -recurse funktioniert nimm bitte nur "*" als Auswahl, mit "*.*" geht es nicht.
- Wenn du später in der Pipe auf den vollen Dateinamen zugreifen willst, darfst du ihn nicht vorher wegselektieren.
Wenn du in der Pipe noch mehr anstellen willst, kannst du das z.Bsp. so machen:
gci * -recurse | where -filterscript {!$_.psiscontainer -And $_.length -lt '500000000'} | ft -auto
Eins davon hilft dir dabei: Get-Member
Ans Ende der Pipe gehängt, zeigt es dir Methoden und Eigenschaften an.
Gruß
LotPings
Ans Ende der Pipe gehängt, zeigt es dir Methoden und Eigenschaften an.
Gruß
LotPings
Indem du als Quelle nicht zwei unabhängige Werte angibst, sondern einen
Ich glaube du hast nicht verstanden was der foreach macht.
Der verarbeitet doch jedes aus der Pipe kommende Objekt separat.
Deine Zeile 5 fängt aber wieder von vorne an.
Den kompletten Namen des Quellobjekts hast du doch in $_.fullname, wenn du jetzt einen Teil-Quell-Pfad mit in den Zielpfad einbauen willst, habe ich hier 2 alternative methoden eingebaut.
(Ausserdem zeige ich testhalber den Move nur mit Write-Host an)
Gruß
LotPings
PS: Der Text im Else-Zweig war Unsinn.
Ich glaube du hast nicht verstanden was der foreach macht.
Der verarbeitet doch jedes aus der Pipe kommende Objekt separat.
Deine Zeile 5 fängt aber wieder von vorne an.
Den kompletten Namen des Quellobjekts hast du doch in $_.fullname, wenn du jetzt einen Teil-Quell-Pfad mit in den Zielpfad einbauen willst, habe ich hier 2 alternative methoden eingebaut.
(Ausserdem zeige ich testhalber den Move nur mit Write-Host an)
$Quelle = "D:\Test\2009\"
$ZielBasis = "X:"
gci $Quelle -recurse | foreach {
if (!$_.psiscontainer -And $_.length -lt '10000')
{
# $Ziel = $ZielBasis + $_.DirectoryName.substring(2)
$Ziel = $_.FullName.replace($Quelle ,$ZielBasis + "\")
Write-Host Move-Item $_.FullName -Destination $Ziel
}
else
{
Write-Host $_.length $_.FullName "Entspricht nicht den Kriterien"
}
}
Gruß
LotPings
PS: Der Text im Else-Zweig war Unsinn.
Hallo tray,
es wäre schon hilfreich wenn du die Fehlermeldung weitergibst.
Man kann/will nicht immer alle Aspekte in der eigenen Umgebung testen.
Und warum soll ich mir mehr Mühe beim Finden des Fehlers machen als du selbst?
Versuche mal diese Version, sie erstellt ein nicht vorhandene Zielverzeichnis vor dem Move:
Gruß
LotPings
es wäre schon hilfreich wenn du die Fehlermeldung weitergibst.
Man kann/will nicht immer alle Aspekte in der eigenen Umgebung testen.
Und warum soll ich mir mehr Mühe beim Finden des Fehlers machen als du selbst?
Versuche mal diese Version, sie erstellt ein nicht vorhandene Zielverzeichnis vor dem Move:
$Quelle = "D:\Test\2009\"
$ZielBasis = "D:\Test\2009.x\"
gci $Quelle -recurse | foreach {
if (!$_.psiscontainer -And $_.length -lt '100')
{
$Ziel = $_.DirectoryName.replace($Quelle ,$ZielBasis )
if (!(test-path $Ziel)) {mkdir $Ziel}
# Write-Host Move-Item -path $_.FullName -Destination $Ziel
Move-Item -path $_.FullName -Destination $Ziel
}
}
Gruß
LotPings