Auslesen, umbennnen und kopieren - einfügen, wenn Datei bereits vorhanden
Hallo zusammen,
ich hoffe Ihr könnt mir helfen:
Kurz zu meinem Anliegen.
Ich muss in unregelmäßigen Abständen auf etwa 30 unterschiedlichen Terminalservern Dateien in ein bestimmtes Verzeichnis (ist auf allen servern gleich) kopieren.
Es sind alleridngs dll Dateien. Da diese aber im Tagesbetrieb in Benutzung sind, kann ich diese nciht ersetzen sondern muss die bereits vorhandenen jedesmal mühsig per Hand erst umbenennen und dann die neuen dll einfügen. Erst dann kann ich den USern Bescheid geben, dass die die Applikation beenden und neu starten um die neue dll zu ziehen.
Bitte keine fragen wieso ich cniht erst alle USer bitte die Applikation zu schließen bevor ich die Dateien einfüge. Nur kruz, wir sind um die 450 User und die dll gehören zu unserer Hauptsoftware.
Meine Frage ist jetzt:
Wie kann ich es hinbekommen, das zu automatisieren?
Ich stelle mir das folgendermaßen vor:
Erstmal hab ich eine TXT Datei darin sind alle Terminalserver aufgeführt, welche betroffen sind.
Dann habe ich einen Quellpfad worin die "neuen" Dateien sind, welche auf den Temrinlservern ausgetauscht werden sollen.
Jetzt soll geprüft werden ist die erste Datei aus dem Quellpfad bereits im Zielpfad des ersten Terminalservers (\\TS1\c$\Programme\Anwendungsprogramm\) vorhanden, wenn ja dann benennen bitte die bereits vorhandene Datei um in Dateiname.dll-old und kopiere danach die Datei aus dem Quellpfad ins Zielverzeichnis auf dem Temrinalserver.
Und das machst Du jetzt bitte für alle Dateien im Quellpfad.
Wenn damit fertig, dann nimm den nächsten Temrinalserver vor u.s.w. und so fort.
Hoffe Ihr konntet mir grob folgen?
Veilen dank schonmal für ein bisschen Hilfestellung.
ich hoffe Ihr könnt mir helfen:
Kurz zu meinem Anliegen.
Ich muss in unregelmäßigen Abständen auf etwa 30 unterschiedlichen Terminalservern Dateien in ein bestimmtes Verzeichnis (ist auf allen servern gleich) kopieren.
Es sind alleridngs dll Dateien. Da diese aber im Tagesbetrieb in Benutzung sind, kann ich diese nciht ersetzen sondern muss die bereits vorhandenen jedesmal mühsig per Hand erst umbenennen und dann die neuen dll einfügen. Erst dann kann ich den USern Bescheid geben, dass die die Applikation beenden und neu starten um die neue dll zu ziehen.
Bitte keine fragen wieso ich cniht erst alle USer bitte die Applikation zu schließen bevor ich die Dateien einfüge. Nur kruz, wir sind um die 450 User und die dll gehören zu unserer Hauptsoftware.
Meine Frage ist jetzt:
Wie kann ich es hinbekommen, das zu automatisieren?
Ich stelle mir das folgendermaßen vor:
Erstmal hab ich eine TXT Datei darin sind alle Terminalserver aufgeführt, welche betroffen sind.
Dann habe ich einen Quellpfad worin die "neuen" Dateien sind, welche auf den Temrinlservern ausgetauscht werden sollen.
Jetzt soll geprüft werden ist die erste Datei aus dem Quellpfad bereits im Zielpfad des ersten Terminalservers (\\TS1\c$\Programme\Anwendungsprogramm\) vorhanden, wenn ja dann benennen bitte die bereits vorhandene Datei um in Dateiname.dll-old und kopiere danach die Datei aus dem Quellpfad ins Zielverzeichnis auf dem Temrinalserver.
Und das machst Du jetzt bitte für alle Dateien im Quellpfad.
Wenn damit fertig, dann nimm den nächsten Temrinalserver vor u.s.w. und so fort.
Hoffe Ihr konntet mir grob folgen?
Veilen dank schonmal für ein bisschen Hilfestellung.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1862074880
Url: https://administrator.de/contentid/1862074880
Ausgedruckt am: 22.11.2024 um 19:11 Uhr
5 Kommentare
Neuester Kommentar
Moin,
um den Lernfaktor hoch zu halten, solltest du die Powershell nutzen. Dazu folgende Ansätze:
Nachtrag: du musst beim Umbenennen natürlich noch prüfen, ob der neue Dateiname (blablabla.dll-old) nicht auch schon existiert. ich würde da dann als suffix das Datum im Format YYYYMMDD verwenden:
Gruß
em-pie
um den Lernfaktor hoch zu halten, solltest du die Powershell nutzen. Dazu folgende Ansätze:
- schreibe alle Zielsysteme in ein Array/ in eine Text-Datei
- lese die Textdatei aus $ServerList = Get-Content()
- Für jeden Server in der Liste (=foreach()) prüfst du
- Ob die Ziel dll existiert (=if (TestPath ...))
- Falls ja: umbenennen (=Move-Item)
- Falls nein: weiter im Text
- Die neue Datei ans Ziel kopieren (=Copy-Item())
Nachtrag: du musst beim Umbenennen natürlich noch prüfen, ob der neue Dateiname (blablabla.dll-old) nicht auch schon existiert. ich würde da dann als suffix das Datum im Format YYYYMMDD verwenden:
blablabla.dll.20220208
Gruß
em-pie
Moin,
Gruß Thomas
# Serverliste
$Servers = cat "C:\Pfad\zur\Serverliste.txt"
# Subpfad
$Sub = 'c$\Programme\Anwendungsprogramm'
# DLL-Pfad
$DLLs = Get-ChildItem -File "C:\Pfad\zum\DLL-Ordner\*.dll"
Foreach ($Server in $Servers) {
Foreach ($DLL in $DLLs) {
try {
if (Test-Path -PathType Leaf -Path "$Server\$Sub\$($DLL.Name)") {
Rename-Item -Path "$Server\$Sub\$($DLL.Name)" -NewName "$($DLL.Name)-old" -ErrorAction Stop
Write-Host "$SERVER: '$($DLL.Name)' umbenannt in '$($DLL.Name)-old'. "
}
Copy-Item $DLL.Fullname "$Server\$Sub\$($DLL.Name)" -ErrorAction Stop
Write-Host "$SERVER: '$($DLL.Name)' erfolgreich kopiert. "
} catch {Write-host -ForegroundColor Red "$SERVER: $($_.Exception.Message)"}
} # Ende Foreach DLL
} # Ende Foreach Server
Gruß Thomas
@TK1987
Spielverderber
Spielverderber