eb1980
Goto Top

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.

Content-ID: 1862074880

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

Ausgedruckt am: 22.11.2024 um 19:11 Uhr

em-pie
em-pie 08.02.2022 aktualisiert um 11:46:57 Uhr
Goto Top
Moin,

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
TK1987
Lösung TK1987 08.02.2022 aktualisiert um 12:43:23 Uhr
Goto Top
Moin,

# 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
em-pie
em-pie 08.02.2022 um 12:52:24 Uhr
Goto Top
@TK1987
Spielverderber face-wink
TK1987
TK1987 08.02.2022 um 13:04:28 Uhr
Goto Top
Zitat von @em-pie:
@TK1987
Spielverderber face-wink
Immer wieder gern 😛
eb1980
eb1980 08.02.2022 um 15:19:00 Uhr
Goto Top
Hey zusammen,

Ihr habt mir den Tag gerettet.
Hab hier und da natürlich bisschen was umgebaut und juhu es klappt wie es soll.

Danke euch allen