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, 4798 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows 10
Powershell 5 BSOD (8)

Tipp von agowa338 zum Thema Windows 10 ...

Batch & Shell
gelöst PowerShell Script Move-Item nach x Tagen (5)

Frage von lupolo zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell - In Textdatei suchen und ersetzen (5)

Frage von Raaja89 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...