kaiuwe28
Goto Top

Neuste Datei via PowerShell kopieren

Hallo zusammen,

ich hatte mir mit Hilfe der Suche im Forum einen kleinen Code von colinardo rausgesucht und versucht diesen bei mir anzuwenden.
Die Abfrage läuft, nach einer Minute ist immer noch nix passiert, Abfrage wird noch ausgeführt und es kommt kein Fehler. Hatte diese bisher immer gestoppt, da ich mir dachte, ich habe bestimmt noch was falsch gemacht.

Link, von wo ich den Code habe

So habe ich ihn angepasst:

dir \\Adress\AZ_System1_Sys2Sys* | ?{$_.LastWriteTime -gt (Get-date).AddDays(-1)} | Copy-Item -Destination "\\zieladresse"  

Es handelt sich um eine csv Datei, welche kopiert werden soll. Insgesamt gibt es immer 2, welche zu unterschiedlichen Pfaden sollen.

Dateiname: AZ_System1_Sys2Sys_DatumVortag.csv
Erstellungsdatum ist immer der aktuelle Tag.

Schon einmal vielen Dank face-smile

Content-ID: 355677

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

Ausgedruckt am: 16.11.2024 um 19:11 Uhr

134464
134464 22.11.2017 aktualisiert um 08:50:14 Uhr
Goto Top
Neuste Datei via PowerShell kopieren
gci "\\Adress\AZ_System1_Sys2Sys*" -File | sort LastWriteTime -Desc | Select -First 1 | Copy-Item -Destination "\\zieladresse" -Force  
Kraemer
Kraemer 22.11.2017 um 08:51:09 Uhr
Goto Top
Moin,
Zitat von @kaiuwe28:
Erstellungsdatum ist immer der aktuelle Tag.
wenn das so ist, warum passt du das Skript nicht entsprechend an?

Die Abfrage läuft, nach einer Minute ist immer noch nix passiert,
da stellen sich 2 Fragen: Wie schnell ist die Netzwerkverbindung und wie viele Dateien liegen in dem Verzeichnis...

Gruß
Pedant
Pedant 22.11.2017 um 10:56:08 Uhr
Goto Top
Hallo kaiuwe28,

auch wenn Specht die Aufgabe vermutlich schon gelöst hat...

Deine Aufgabenbeschreibung ist unklar und/oder fehlerhaft.
Zitat von @kaiuwe28:
Es handelt sich um eine csv Datei, welche kopiert werden soll.
copy *.csv zielordner
wäre dann die Antwort.

Zitat von @kaiuwe28:
Insgesamt gibt es immer 2, welche zu unterschiedlichen Pfaden sollen.
Copy oder Move zu unterschiedlichen Pfaden?
Im Skript steht copy, aber dann wären es nicht insgesamt 2, sondern jeden Tag zwei mehr.

Dateiname: AZ_System1_Sys2Sys_DatumVortag.csv
Wenn es 2 (pro Tag) sind, können nicht beide diesen Namen haben oder liegen sie in unterschiedlichen Quellen oder haben sie unterschiedliche Extensionen?

Gruß Frank
kaiuwe28
kaiuwe28 22.11.2017 um 11:37:28 Uhr
Goto Top
Hallo Specht,

vielen Dank dir!

Wenn ich Copy zu Move ersetze, dann würde er ja die Datei verschieben.
Kann ich da jetzt auch sagen, dass alle Dateien dieses Types älter 2 Tage verschoben werden?

Ich hatte von der Seite den Code unter
2.1.3.2 Zeiteigenschaften (CreationTime, LastAccessTime, LastWriteTime) Beispiel 4c probiert und die 30 auf 3 angepasst, aber die Schleife läuft bei mir immer auf Fehler.
kaiuwe28
kaiuwe28 22.11.2017 um 11:45:30 Uhr
Goto Top
Hallo Frank,

ja du hast Recht. Die Antwort von Specht hat schon den ersten Wunsch erfüllt.

Vielleicht habe ich mich zu ungenau ausgedrückt, daher hier die genaue Konstellation:

Es gibt einen Serverpfad wo täglich ein bis zwei Dateien abgelegt werden, meistens 2, es kann aber auch mal nur eine sein.
Bei den Dateien handelt es sich um csv Dateien mit folgende Aufbau im Namen "AZ_System1_Sys2Sys_DatumVortag.csv" und "AZ_System2_Sys2Sys_DatumVortag.csv". Die Dateien werden immer um 00:30 Uhr abgelegt.

Für jede csv Datei gibt es einen Pfad / Ziel, also System1 zu Zieladresse1 und System2 zu Zieladresse2.

Die Copy erfolgt jetzt mit den Code von Specht, welchen ich für beide Dateien angelegt habe.

Aktuell würde ich gern noch die Dateien älter 3 Tage auf dem Orginalordner in einen "erledigt" Ordner verschieben.

Ich hoffe, dass ich es jetzt besser rübergebracht habe face-smile
kaiuwe28
kaiuwe28 22.11.2017 um 11:48:57 Uhr
Goto Top
Zitat von @Kraemer:

Moin,
Zitat von @kaiuwe28:
Erstellungsdatum ist immer der aktuelle Tag.
wenn das so ist, warum passt du das Skript nicht entsprechend an?

Leider bin ich hier noch komplett am Anfang und versuche das zu verstehen und anzuwenden. Das klappt nicht immer und daher meine Fragen bzw. Bitten nach Hilfe ;)

Die Abfrage läuft, nach einer Minute ist immer noch nix passiert,
da stellen sich 2 Fragen: Wie schnell ist die Netzwerkverbindung und wie viele Dateien liegen in dem Verzeichnis...

Leider ist das Netzwerk viel zu langsam. In den Ordner waren ca. 600 Dateien. Den Großteil habe ich jetzt in einen Unterordner verschoben und die Performance ist natürlich schon viel besser.
134464
Lösung 134464 22.11.2017 aktualisiert um 12:08:28 Uhr
Goto Top
Zitat von @kaiuwe28:

Hallo Specht,

vielen Dank dir!

Wenn ich Copy zu Move ersetze, dann würde er ja die Datei verschieben.
Kann ich da jetzt auch sagen, dass alle Dateien dieses Types älter 2 Tage verschoben werden?
Logisch
gci "\\Adress\AZ_System1_Sys2Sys*" -File | ?{$_.Lastwritetime -lt (get-date).Date.AddDays(-2)} | move-Item -Destination "\\zieladresse" -Force  
Pedant
Pedant 22.11.2017 aktualisiert um 12:08:38 Uhr
Goto Top
Hallo kaiuwe28,

Zitat von @kaiuwe28:
...Beispiel 4c probiert und die 30 auf 3 angepasst, aber die Schleife läuft bei mir immer auf Fehler.
sieht Dein Skript folglich so aus?:
Set-StrictMode -Version "2.0"  
Clear-Host

$Path = "C:\temp\Homes\"  
$ArchivPath = "C:\Temp\HomesArchiv\"  
$JetztMinus3Tage = (Get-Date).AddDays(-3)

$FilesAelter3Tage = @(Get-ChildItem $Path -recurse| Where{$JetztMinus3Tage -gt $_.CreationTime})
$FilesAelter3Tage | ForEach{
	$ArchivPath=$($_.FullName).Replace($Path,$ArchivPath)
	$ArchivPath = Split-Path $ArchivPath -Parent
	New-Item -path $ArchivPath -type Directory -EA 0 #keine Fehlermeldung

	Move-item -Path $_.FullName -Destination $ArchivPath -EA 0 #keine Fehlermeldung
	If($?){
		 "{0} wurde erfolgreich nach {1} verschoben" -f $_.FullName,$ArchivPath  
		 }else{
			$out= "{0} wurde nicht nach {1} verschoben" -f $_.FullName,$ArchivPath  
			Write-Host $out -BackgroundColor Red -ForegroundColor Blue
		 }
	}

Zitat von @kaiuwe28:
...aber die Schleife läuft bei mir immer auf Fehler.
Wie äußern die sich?

Poste doch bitte auch mal ein
dir *.* quellordner

und versuch Deine Aufgabenstellung final zu formulieren.

  • Was habe ich
  • Was will ich
  • Wie versuche ich es zu erreichen
  • Was geht dabei schief (unerwünschte Ergebnisse/Fehlermeldungen)

Gruß Frank

EDIT:
Habe gerade erst gesehen, dass Du einige meine Nachfragen schon beantwortet hattest.
Verzeih bitte meine Unaufmerksamkeit.
Pedant
Pedant 22.11.2017 um 12:19:10 Uhr
Goto Top
Hallo kaiuwe28,

Zitat von @kaiuwe28:
Für jede csv Datei gibt es einen Pfad / Ziel, also System1 zu Zieladresse1 und System2 zu Zieladresse2.
Da Du mittlerweile von Verschieben sprichst,
kannst Du bei den CSV erzeugenden Skripten nicht gleich die jeweiligen Zielordner entsprechend anpassen und benötigst dann kein Verschieben-Skript?

Zitat von @kaiuwe28:
Aktuell würde ich gern noch die Dateien älter 3 Tage auf dem Orginalordner in einen "erledigt" Ordner verschieben.
Ist diese Anforderung noch aktuell?
Sie ist ja nur bedingt kompatibel zu "verschieben".

Gruß Frank
kaiuwe28
kaiuwe28 22.11.2017 um 13:51:32 Uhr
Goto Top
Hi Frank,

ja es sah identisch aus. Leider habe ich den Fehler nicht gespeichert.

Es wurden immer die 2 ältesten Dateien verschoben und dann hat er die weiteren Dateien gefunden, konnte diese aber nicht verschieben.

Durch den Code von Specht klappt es jetzt auch mit den Dateien älter 3 Tage.

Für das nächste Mal habe ich gelernt, die Anforderung, meine festgestellten Fehler und das Ziel besser darzustellen, damit es auch für alle besser nachvollziehbar ist.

Nochmal vielen Dank an euch und ich lerne jedes Mal dazu face-smile
kaiuwe28
kaiuwe28 22.11.2017 um 13:57:47 Uhr
Goto Top
Danke dir!

Hier noch die für mich benötigte Lösung dank eurer Hilfe:

gci "\\Adresse\AZ_System1_Sys2Sys*" -File | sort LastWriteTime -Desc | Select -First 1 | Copy-Item -Destination "\\Ziel" -Force  
gci "\\Adresse\AZ_System2_Sys2Sys*" -File | sort LastWriteTime -Desc | Select -First 1 | Copy-Item -Destination "\\Ziel" -Force  

gci "\\Adresse\AZ_System1_Sys2Sys*" -File | ?{$_.Lastwritetime -lt (get-date).Date.AddDays(-3)} | move-Item -Destination "\\Ziel\erledigt" -Force  
gci "\\Adresse\AZ_System2_Sys2Sys*" -File | ?{$_.Lastwritetime -lt (get-date).Date.AddDays(-3)} | move-Item -Destination "\\Ziel\erledigt" -Force