Top-Themen

Aktuelle Themen (A bis Z)

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

gelöst Mit PowerShell Dateien aus Verzeichnis incl. Unterverzeichnissen auslesen. Erstelldatum prüfen und ggf. ändern. Auslesen und ändern in log-Datei

Mitglied: silvereye

silvereye (Level 1) - Jetzt verbinden

10.12.2019 um 11:30 Uhr, 351 Aufrufe, 6 Kommentare

Hallo,

da ich im Bereich der Power Shell Programmierung leider nicht über genügend Hintergrundwissen verfüge bitte ich Euch um Hilfe.

Ich möchte mit einer Power Shell in einem Verzeichnis (im Code hinterlegt) mit Unterverzeichnissen nach beliebigen Dateien (ca. 20.000 bis 100.000 Dateien) suchen und den kompletten Pfad, das Erstelldatum und letzte Speicher- und Zugriffsdatum in einer log-Datei speichern (csv).
Während des Suchvorganges soll geprüft werden, ob das Erstelldatum der jeweiligen Datei z.B. älter als 360 Tage zum aktuellen Datum (Tagesdatum) ist. Wenn ja, dann soll das Erstelldatum und das letzte Speicher-und Zugriffsdatum der Datei auf das aktuelle Tagesdatum gesetzt werden.

Meine Hoffnung war, aus einigen Codeschnipseln das zusammen zu kopieren leider ohne Erfolg – da fehlt mir einiges an Basiswissen.
Hat jemand hierfür schon eine ähnliche Lösung realisiert auf die ich aufsatteln könnte?

Vielen Dank vorab für Eure Hilfe
Mitglied: TK1987
10.12.2019, aktualisiert um 13:00 Uhr
# Arbeitspfade
	$Arbeitspfad='C:\Test'
	$CSV='C:\Pfad\zur\Datei.CSV'

# Falls Erstelldatum älter als 1 Jahr, setze Erstelldatum und Änderungsdatum auf aktuelles Datum
	ls -r $Arbeitspfad | ? {$_.Creationtime -lt (Get-Date).AddYears(-1)} | % {
		$_.CreationTime=get-date
		$_.LastWriteTime=get-date
		}

# Ausgabe Dateien als CSV
	ls -r $Arbeitspfad | select Fullname,CreationTime,LastWriteTime | Export-CSV -d ';' -nti -encoding Default $CSV
Die Zeilen 2 & 3 müssen natürlich angepasst werden.

Falls hingegen nur die Dateien als CSV ausgegeben werden sollen, die geändert wurden
# Arbeitspfade
	$Arbeitspfad='C:\Test'
	$CSV='C:\Pfad\zur\Datei.CSV'

# Falls Erstelldatum älter als 1 Jahr, setze Erstelldatum und Änderungsdatum auf aktuelles Datum
	ls -r $Arbeitspfad | ? {$_.Creationtime -lt (Get-Date).AddYears(-1)} | % {
		$_.CreationTime=get-date
		$_.LastWriteTime=get-date
		$_
		} |  select Fullname,CreationTime,LastWriteTime | Export-CSV -d ';' -nti -encoding Default $CSV
Bitte warten ..
Mitglied: silvereye
11.12.2019 um 17:27 Uhr
Hallo TK 1987,

danke für Deine schnelle Antwort. Beim Ausführen des 1. Codeblocks kommt eine Fehlermeldung in der Zeile 12 bei "-d". Ich habe das ersetzt mit "Delimiter ":
Beim 2. Codeblock habe ich das analog zum 1. auch geändert funktioniert dann natürlich auch.

Ich habe den Code so verändert, dass man die Anzahl der Tage vorab als Differenz eingeben kann. Ich habe noch zusätzlich den letzten Zugriffszeitpunkt mit geändert um evtl. Konflikte zu vermeiden:
# Arbeitspfade
	$Arbeitspfad='C:\Users\egreweo\Desktop\Test_2'
	$CSV='C:\Users\egreweo\Desktop\log-Datei.CSV'
# Datumsdifferenz in Tagen
    $TagesDiff = 360

# Falls Erstelldatum älter als xxx Tage, setze Erstelldatum, Änderungsdatum und letzes Zugriffsdatum auf aktuelles Datum
	ls -r $Arbeitspfad | ? {$_.Creationtime -lt (Get-Date).AddDays(-$TagesDiff)} | % {
		$_.CreationTime=get-date
		$_.LastWriteTime=get-date
        $_.LastAccessTime=get-date
		}

# Ausgabe Dateien als CSV
	ls -r $Arbeitspfad | select Fullname,CreationTime,LastWriteTime,LastAccessTime | Export-CSV -Delimiter ';' -nti -encoding Default $CSV
Hat jemand noch eine Idee, wie man zu einer Änderung das Erstelldatum, letzte Speicherung und letzten Zugriff des vorherigen Datenstands in der CSV in der gleichen Zeile dokumentiert?

Danke und Viele Grüße
Bitte warten ..
Mitglied: TK1987
11.12.2019, aktualisiert um 19:08 Uhr
Zitat von silvereye:
Beim Ausführen des 1. Codeblocks kommt eine Fehlermeldung in der Zeile 12 bei "-d". Ich habe das ersetzt mit "Delimiter
seltsam, bei mir funktioniert delimiter auch mit d abgekürzt... sei's drum.
Hat jemand noch eine Idee, wie man zu einer Änderung das Erstelldatum, letzte Speicherung und letzten Zugriff des vorherigen Datenstands in der CSV in der gleichen Zeile dokumentiert?
Macht in dem Moment natürlich nur Sinn, wenn du die 2. Variante nutzen würdest. Also nur Daten als CSV auszugeben, welche wirklich geändert wurden.

Man könnte einfach die Ausgabe in der Foreach-Schleife vor die Änderung legen und nachher mit select-object eigene Spalten definieren. Z.B.:
# Arbeitspfade
	$Arbeitspfad='C:\Users\egreweo\Desktop\Test_2'
	$CSV='C:\Users\egreweo\Desktop\log-Datei.CSV'

# Datumsdifferenz in Tagen
	$TagesDiff = 360
	

# Falls Erstelldatum älter als 1 Jahr, setze Erstelldatum und Änderungsdatum auf aktuelles Datum
	ls -r $Arbeitspfad | ? {$_.Creationtime -lt (Get-Date).AddDays(-$TagesDiff)} | % {
		$_
		$_.CreationTime=get-date
		$_.LastWriteTime=get-date
		$_.LastAccessTime=get-date
		} |  select Fullname,
			@{n='Erstelldatum vorher';e={$_.CreationTime}},
			@{n='Erstelldatum nachher';e={get-date}},
			@{n='Änderungsdatum vorher';e={$_.LastWriteTime}},
			@{n='Änderungsdatum nachher';e={get-date}},
			@{n='Letztes Zugriffsdatum vorher';e={$_.LastAccessTime}},
			@{n='Letztes Zugriffsdatum nachher';e={get-date}}| Export-CSV -Delimiter ';' -nti -encoding Default $CSV
Wie du sehen kannst, ist der Output der Foreach-Schleife, der in den select-object Befehl eingeleitet wird Zeile 11 - entspricht damit also noch den Werten vor der Änderung.
Im select-object-Befehl definiere ich dann einfach eigene Spalten mit den gewünschten Werten, die mit Export-CSV ausgegeben werden sollen.
Bitte warten ..
Mitglied: silvereye
12.12.2019 um 16:17 Uhr
... vielen Dank. Funktioniert bei mir un d habe es für mich ein bisschen angepasst:
...
# Falls Erstelldatum älter als 1 Jahr, setze Erstelldatum und Änderungsdatum auf aktuelles Datum
	ls -r $Arbeitspfad | ? {$_.Creationtime -lt (Get-Date).AddDays(-$TagesDiff)} | % {
		$_
		$_.CreationTime=get-date
		$_.LastWriteTime=get-date
		$_.LastAccessTime=get-date
		} |  select Fullname,
			@{n='Erstelldatum vorher';e={$_.CreationTime}},			
			@{n='Änderungsdatum vorher';e={$_.LastWriteTime}},
			@{n='Letztes Zugriffsdatum vorher';e={$_.LastAccessTime}},
            @{n='Erstelldatum nachher';e={get-date}},
			@{n='Änderungsdatum nachher';e={get-date}},
			@{n='Letztes Zugriffsdatum nachher';e={get-date}}| Export-CSV -Delimiter ';' -nti -encoding Default $CSV

Macht in dem Moment natürlich nur Sinn, wenn du die 2. Variante nutzen würdest. Also nur Daten als CSV auszugeben, welche wirklich geändert wurden.
Nicht ganz, ich möchte das ganze Verzeichnis mit dem aktuellen Erstell-, Änderungs- und Letztes Zugriffsdatum in eine CSV-Datei schreiben. Wenn das Erstelldatum zu weit zurück liegt, dann sollen die 3 "Zeitstempel" der Datei geändert werden und in die CSV-Datei geschrieben werden. D.h. es gibt mal 3 Spalten (Datum vorher) zu einer Datei und ggf. noch 3 weitere Spalten mit einem Datum (Datum nachher).
Bitte warten ..
Mitglied: TK1987
LÖSUNG 13.12.2019 um 09:22 Uhr
Zitat von silvereye:
Nicht ganz, ich möchte das ganze Verzeichnis mit dem aktuellen Erstell-, Änderungs- und Letztes Zugriffsdatum in eine CSV-Datei schreiben. Wenn das Erstelldatum zu weit zurück liegt, dann sollen die 3 "Zeitstempel" der Datei geändert werden und in die CSV-Datei geschrieben werden. D.h. es gibt mal 3 Spalten (Datum vorher) zu einer Datei und ggf. noch 3 weitere Spalten mit einem Datum (Datum nachher).

Dann eben noch ganz anders...
# Für Alle Objekte im $Arbeitspfad
	ls -r $Arbeitspfad | % {
		if ($_.CreationTime -lt (get-date).AddDays(-$TagesDiff)) # Wenn Objekt älter als $TagesDiff
			{ # dann...
			
				New-Object PSObject -Property @{
					Pfad=$_.Fullname
					'Erstelldatum vorher'=$_.CreationTime
					'Änderungsdatum vorher'=$_.LastWriteTime
					'Letzter Zugriff vorher'=$_.LastAccessTime
					'Erstelldatum nachher'=get-date
					'Änderungsdatum nachher'=get-date
					'Letzter Zugriff nachher'=get-date
					}
				
				$_.CreationTime=get-date
				$_.LastWriteTime=get-date
				$_.LastAccessTime=get-date
				
			} else { # sonst...
			
				New-Object PSObject -Property @{
					Pfad=$_.Fullname
					'Erstelldatum vorher'=$_.CreationTime
					'Änderungsdatum vorher'=$_.LastWriteTime
					'Letzter Zugriff vorher'=$_.LastAccessTime
					}
					
			}
			
		} | select Pfad,
			'Erstelldatum vorher',
			'Änderungsdatum vorher',
			'Letzter Zugriff vorher',
			'Erstelldatum nachher',
			'Änderungsdatum nachher',
			'Letzter Zugriff nachher' | Export-CSV -Delimiter ';' -nti -encoding Default $CSV
Bitte warten ..
Mitglied: silvereye
13.12.2019 um 13:06 Uhr
... klasse, bei mir funktioniert es in der Testumgebung. Werde es gleich mal in einer weiteren Testumgebung mit mehrerern Dateien testen.
Vielen Dank für Deine Unterstützung!
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch Erstelldatum Datei auslesen
Frage von batlernerBatch & Shell2 Kommentare

Hallo, ich bin gerade am Anfang der Batch programmierung und habe ein Problem in meinem Programm. Ich will Dateien ...

Batch & Shell
Drag and Drop in Powershell
gelöst Frage von mc-doubleyouBatch & Shell2 Kommentare

Hallo zusammen, inwischen habe ich mich von cmd zur Powershell vorgearbeitet, die Lösungen die mir Google aber so liefert ...

Windows Server

Powershell - suche nach gelöschter Datei aus LOG

Frage von krischeuWindows Server15 Kommentare

Hi, da bin ich wieder. Ich suchte nach einer Möglichkeit, aus LOG-Dateien zu extrahieren, wo man das Löschen von ...

Batch & Shell

In Batch auf Erstelldatum einer Datei prüfen

gelöst Frage von AS-N00Batch & Shell5 Kommentare

Hallo, foolgendes Problem. Ich muss eine leer Datei "dpd.ini" in "d:\bw50" erstellen, wenn in einem Ordner "d:\bw50\dpd\export\" es keine ...

Neue Wissensbeiträge
Sicherheit
0-day Schwachstelle im Internet Explorer
Information von kgborn vor 1 TagSicherheit

In Microsofts Internet Explorer gibt es eine 0-day Schwachstelle in der Scripting Engine, die faktisch alle Browser- und Windows-Versionen ...

Internet

Internet-Speedtest Automatisieren via Befehlszeile, cmd, Bash (Windows, Linux, FreeBSD, Mac)

Tipp von anteNope vor 1 TagInternet3 Kommentare

Also das hier ist irgendwie an mir vorbeigegangen. Einfacher geht es schlicht nicht mehr. Speedtest.cmd Via Aufgabenplanung stündlich oder ...

Administrator.de Feedback

Entwicklertagebuch: Codeblöcke auf unseren Seiten

Information von admtech vor 2 TagenAdministrator.de Feedback8 Kommentare

Hallo Administrator User, Unsere Codeblöcke werden ab sofort anders dargestellt. Die Codeblöcke können nun direkt per Copy&Paste kopiert werden. ...

Humor (lol)
Internet - auch 2020 noch Neuland ?
Erfahrungsbericht von Henere vor 2 TagenHumor (lol)6 Kommentare

Heute eine Mail der Schule meiner Tochter bekommen. Blabla Umweltschutz bla bla siehe Anhang. Dumm nur: Da hab ich ...

Heiß diskutierte Inhalte
Webbrowser
Kann Firefox von Google Suche nicht befreien
Frage von RG2525Webbrowser15 Kommentare

Hallo, Das passiert jetzt in letzter Zeit auf mehreren Computern von mir, dass die Google Suche sich nicht ausschalten ...

Windows Userverwaltung
Laptop WAKE ON LAN problem
Frage von WhatEver007Windows Userverwaltung9 Kommentare

Hallo, wie oben beschrieben geht es um wake on lan. Wenn ich auf meinen Netzwerkadapter gehe sehe ich keine ...

Sicherheits-Tools
Passwort Manager mit AD anbindung und dt. Oberfläche
gelöst Frage von sani007Sicherheits-Tools9 Kommentare

Hallo Ich suche kostengünstigen Passwort Manager mit AD-Anbindung mit weboberfläche. Am besten mit VM-Image zur schnellen Installation. Wenn es ...

Peripheriegeräte
Datenstrom Drucker
Frage von FragefuchsPeripheriegeräte9 Kommentare

Moin, kann mir jemand sagen, wie Computer Daten an einen Drucker weitergeben? Gibt es dafür ein Protokoll oder Format? ...