doskias
Goto Top

Hilfe beim Copy Job via Powershell

Moin zusammen,

ich glaube ich stehe grade auf dem schlauch und brauch einmal einen ordentlich tritt da runter. face-smile

Wir haben bei uns einige selbstgeschriebene Programme im Einsatz. Wir nennen diese einfach mal P1 und P2. Beide Programme liegen in einem Ordner O, der sich wiederum unter c:\Program Files (x86) befindet, wobei P2 sich auch in einem Unterordner verstecken kann. Beide Programme haben jeweils eine ini-Datei und darüber hinaus werden DSP und MTF Dateien erzeugt. Das Programm ist speichert die Dateien (je nach Einstellung) irgendwo in einem Unterordner unter c:\Program Files (x86)\P1. Die Anwender sind angehalten die Ini-Dateien für Ihr Programm zu sichern und die DSP und MTF - Dateien auf dem dafür eingerichteten Netzlaufwerk zu speichern. Das funktioniert hervorragend.

Blödsinn. Das funktioniert überhaupt nicht. Bei Stichprobentests lag die Erfolgsquote bei den Ini Dateien bei etwa 4 %. Vom Rest spreche ich gar nicht erst. Also habe ich ein Skript erstellt, welches die Dateien nun wenigstens auf die Privaten P-Laufwerke sichert, damit sie im Worst-Case nicht weg sind. Das Skript soll beim An- oder Abmelden laufen (wann weiß ich noch nicht genau) und sieht wie folgt aus:

Vorweg:
$date=get-date -Format yyyyMMdd

1.
$P1_ini=Get-ChildItem 'C:\Program Files (x86)\P1\*' -Include *.ini  |? Name -like "*P1*"   
copy-item $P1_ini P:\P1-Backup\P1.ini_$date

2.
$P2_Ini=Get-ChildItem 'C:\Program Files (x86)\P1\*' -Include *.ini -exclude "*alt*" -Recurse |? Name -like "*P2*"   
copy-item $P2_ini P:\P1-Backup\P2.ini_$date

3.
Die Sicherungen der beiden Ini-Dateien funktioniert gut, da es die Datei nur einmal gibt. Bei den verteilten DSP-Dateien sieht das Skript derzeit so aus:
$DSP=Get-ChildItem 'C:\Program Files (x86)\P1\*' -Include *.dsp -Recurse  
foreach ($Datei in $DSP)
{
copy-item $Datei P:\P1-Backup\$Datei_$date
}

Der dritte Schritt funktioniert nicht so wie ich mir das vorgestellt habe. Ich bekomme (egal wo die Datei liegt) nur einen Datei 20201130 erzeugt. Der Name, die Dateiendung und der Inhalt geht verloren. oder anders gesagt. Es wird eine Leere Datei erzeugt. Ich habe es grade einmal geprüft und auf der Test-Maschine (Kopie eines Produktivrechners) befinden sich in 25 Unterordnern ca. 200 Dateien mit der Dateiendung DSP unter 'C:\Program Files (x86)\P1. Eine einzige direkt darunter, alle anderen in Unterverzeichnissen, wobei hier zwischen 1 und 30 Dateien liegen. Auch diese sind teilweise wieder in weiteren Unterordnern, also C:\Program Files (x86)\P1\Firma1\Standort1\

Für mein Backup ist es nicht erforderlich, dass die Ordnerstruktur mit kopiert wird, wäre aber ein nice-to-have. Wichtiger ist, dass die Dateien dort liegen. Also Frage kurz formuliert:
Wie kann/muss der dritte Skriptblock aussehen, damit alle DSP-Dateien unabhängig von Ihrem Speicherort unter Beibehaltung des Namens und Ergänzung um das heutige Datum auf P:\P1-Backup kopiert werden?


Danke und Gruß
Doskias

Content-ID: 627095

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

Ausgedruckt am: 23.11.2024 um 09:11 Uhr

erikro
Lösung erikro 30.11.2020 um 16:34:31 Uhr
Goto Top
Moin,

copy-item $datei P:\p1-backup\$($datei.name)_$date

hth

Erik
mayho33
mayho33 30.11.2020 um 20:31:02 Uhr
Goto Top
Hi!

Für derart komplexe Aufgaben hat sich Robocopy.exe immer sehr gut bewährt.

Filtern nach Extension, Alter, mehrere Folder und Subs, kopieren, Moven, inkrementell, ....
Alles möglich! Man muss nur die Syntax beherrschen.

Schau es dir doch mal an.
Doskias
Doskias 01.12.2020 um 10:49:47 Uhr
Goto Top
Danke für den Tritt :D
erikro
erikro 01.12.2020 um 18:03:48 Uhr
Goto Top
Immer wieder gerne. face-wink