Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

PowerShell - Nach Dateigröße selektieren

Frage Entwicklung Batch & Shell

Mitglied: tray-park

tray-park (Level 1) - Jetzt verbinden

07.07.2010 um 17:21 Uhr, 4818 Aufrufe, 8 Kommentare

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.
01.
$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
Mitglied: LotPings
07.07.2010 um 21:05 Uhr
Hallo Tray,
gci *.* -recurse | foreach {if (!$_.psiscontainer -And $_.length -lt '10000') {write-host $_.length $_.fullname $_.PSDrive $_.DirectoryName.substring(2) $_.BaseName $_.Extension} }
Statt Write-Host bau halt deinen Befehl zusammen.

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
Bitte warten ..
Mitglied: tray-park
08.07.2010 um 08:30 Uhr
Hi,

danke für die rasche Antwort. Das werde ich gleich versuchen.

Wo bekomme ich eigentlich Infos zu den ganzen möglichen Methoden her?
Also ich meine diese
01.
.....$_.psiscontainer, $_.length .....
MS Technet berichtet ja nur von den CMDlet´s
Bitte warten ..
Mitglied: tray-park
08.07.2010 um 10:39 Uhr
Coole Sache.

Ich hab jetzt statt dem Write-Host und den folgenden Anweisungen versucht die selektierten Dateien zu verschieben.
01.
	gci $quelle * -recurse | foreach { 
02.
		if (!$_.psiscontainer -And $_.length -lt '10000')  
03.
04.
			# Write-Host $_.length $_.fullname 
05.
			$daten=Get-ChildItem $quelle * -Recurse 
06.
			Move-Item $daten -Destination $ziel 
07.
08.
		else 
09.
10.
			Write-Host "Hat nicht geklappt" 
11.
12.
	}	
Das funktioniert aber leider nicht so wirklich. Irgendwie muss ich ja die Selektion in ner Variablen einlesen und der Move-Item Anweisung übergeben.

Wie bekomm ich das hin?
Bitte warten ..
Mitglied: LotPings
08.07.2010 um 10:42 Uhr
Zitat von tray-park:
MS Technet berichtet ja nur von den CMDlet´s
Eins davon hilft dir dabei: Get-Member
Ans Ende der Pipe gehängt, zeigt es dir Methoden und Eigenschaften an.

Gruß
LotPings
Bitte warten ..
Mitglied: LotPings
08.07.2010 um 11:36 Uhr
Zitat von tray-park:
Wie bekomm ich das hin?
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)
01.
$Quelle = "D:\Test\2009\" 
02.
$ZielBasis = "X:" 
03.
gci $Quelle -recurse | foreach { 
04.
  if (!$_.psiscontainer -And $_.length -lt '10000')  
05.
06.
#    $Ziel = $ZielBasis + $_.DirectoryName.substring(2) 
07.
     $Ziel = $_.FullName.replace($Quelle ,$ZielBasis + "\") 
08.
 
09.
    Write-Host Move-Item $_.FullName -Destination $Ziel 
10.
11.
  else 
12.
13.
    Write-Host $_.length $_.FullName "Entspricht nicht den Kriterien" 
14.
15.
}
Gruß
LotPings

PS: Der Text im Else-Zweig war Unsinn.
Bitte warten ..
Mitglied: tray-park
09.07.2010 um 09:26 Uhr
Die Ausgabe zeigt mir die richtigen Pfade, aber nach dem Löschen von Write-Host funktioniert der Move nicht.
Bitte warten ..
Mitglied: LotPings
09.07.2010 um 10:36 Uhr
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:
01.
$Quelle = "D:\Test\2009\" 
02.
$ZielBasis = "D:\Test\2009.x\" 
03.
gci $Quelle -recurse | foreach { 
04.
  if (!$_.psiscontainer -And $_.length -lt '100')  
05.
06.
     $Ziel = $_.DirectoryName.replace($Quelle ,$ZielBasis ) 
07.
     if (!(test-path $Ziel)) {mkdir $Ziel} 
08.
#     Write-Host Move-Item -path $_.FullName -Destination $Ziel 
09.
     Move-Item -path $_.FullName -Destination $Ziel 
10.
11.
}
Gruß
LotPings
Bitte warten ..
Mitglied: tray-park
09.07.2010 um 10:47 Uhr
Ich versuchs mal.

Ich hätte ne Fehlermeldung gepostet, wenn es eine gäbe.
Bitte warten ..
Ähnliche Inhalte
Windows Server
gelöst Powershell und Remote in der Registry rumwuseln (6)

Frage von H41mSh1C0R zum Thema Windows Server ...

Batch & Shell
gelöst HTML in Powershell (8)

Frage von michi-ffm zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell - Verwendung von PSSession erzeugt Fehlermeldung (2)

Frage von Dani zum Thema Batch & Shell ...

Windows Tools
Reg Auswertung mit Powershell (1)

Frage von Bommi1961 zum Thema Windows Tools ...

Neue Wissensbeiträge
Batch & Shell

Batch - ein paar Basics die man kennen sollte

Tipp von Pedant zum Thema Batch & Shell ...

Microsoft

Restrictor: Profi-Schutz für jedes Window

(6)

Tipp von AlFalcone zum Thema Microsoft ...

Batch & Shell

Batch zum Zurücksetzen eines lokalen Profils

Tipp von Mr.Error zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
gelöst Benutzer lässt sich nur an einem Clientcomputer anmelden (17)

Frage von Ammann zum Thema Windows Server ...

Vmware
gelöst Wie würdet Ihr eine ESXi Cluster Farm managen? (11)

Frage von AlFalcone zum Thema Vmware ...

Batch & Shell
gelöst Gruppenzugehörigkeit von AD Usern ermitteln - die Perfektion fehlt (11)

Frage von Stefan007 zum Thema Batch & Shell ...