hugi1987
Goto Top

Batch File Serverprofil umziehen

Hallo zusammen,

ich möchte demnächst Userhomelaufwerke Stück für Stück per Batch auf einen anderen Server umziehen.
Dabei soll dies in 3 Schritten erfolgen:
1.Schritt: Prüfung ob Profil-Dateien in Verwendung hat (mit net file)
2.Schritt: Umziehen der Daten von Server A nach Server B (mit robocopy)
3.Schritt: alte Freigabe entfernen (mit net share)
Dazu habe ich folgende Batch bisher vorbereitet...

echo es wird geprueft ob Benutzer noch angemeldet ist...
net file | findstr BENUTZER

if keine Datei mehr in Verwendung goto Kopieren -->hier happerts noch
else goto Abbruch -->hier auch

:Kopieren
echo Benutzerprofil wird nun kopiert...
robocopy c:\ServerA c:\ServerB /mir /R:5 /W:5

goto Freigabe

:Freigabe
echo Freigabe wird nun entfernt...
net share Freigabe$ /delete

goto Ende

:Abbruch
echo Abbruch, da Benutzer noch angemeldet ist!
(exit)

:Ende
echo Profil erfolgreich kopiert!
#

Könnt ihr mir hier helfen?Mit Batch-Files bin ich noch nicht so vertraut :-P
MfG Daniel

Content-Key: 126345

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

Printed on: April 19, 2024 at 06:04 o'clock

Member: bastla
bastla Oct 02, 2009 at 21:11:17 (UTC)
Goto Top
Hallo Hugi1987!

Sollte sich so machen lassen:
net file|findstr BENUTZER && goto :Abbruch
Das "else" kannst Du einsparen, da ja ohnehin gleich ":Kopieren" folgt ...

Grüße
bastla
Member: Hugi1987
Hugi1987 Oct 02, 2009 at 21:49:27 (UTC)
Goto Top
Danke bastla face-smile

Kannst du mir auch eine Möglichkeit geben, wie man mehrere Benutzerlaufwerke mit dieser Batch ausführen kann?
Ich denke da an eine txt-Datei in der einige Benutzer stehen (Benutzer1,Benutzer2,Benutzer3).
Hast du da eine Idee?
Danke schon mal

Gruß Hugi
Member: bastla
bastla Oct 02, 2009 at 22:00:12 (UTC)
Goto Top
Hallo Hugi1987!

Etwa so (ungetestet):
@echo off & setlocal
set "Liste=D:\Benutzer.txt"  

for /f "usebackq delims=" %%i in ("%Liste%") do set "Benutzer=%%i" & call :ProcessUser  
echo Fertig.
goto :eof

:ProcessUser
echo es wird geprueft ob Benutzer noch angemeldet ist...
net file|findstr "%Benutzer%" && (echo Abbruch, da Benutzer noch angemeldet ist! & goto :eof)  

:Kopieren
echo Benutzerprofil wird nun kopiert...
robocopy \\ServerA\c$\%Benutzer% \\ServerB\c$\%Benutzer% /mir /R:5 /W:5

:Freigabe
echo Freigabe wird nun entfernt...
net share Freigabe$ /delete

:Ende
echo Profil erfolgreich kopiert!
goto :eof
In der Textdatei muss je Zeile ein Benutzer eingetragen sein.

Das Entfernen der Freigabe ist mir nicht ganz klar - hab's daher mal so gelassen, wie Du es vorher angeführt hattest ...

Grüße
bastla
Mitglied: 60730
60730 Oct 02, 2009 at 22:42:49 (UTC)
Goto Top
Servus,

als alter Serverumzieher rate ich dir - mach es nicht so.

Einen neuen Server "probiert" man erstmal aus.

Wenn der läuft - nimmt man sich ein Wochenende, kopiert nicht nur die Userdaten - sondern auch die Zugriffsberechtigungen.

Dann verstellt man in der AD das Userhome / Profilpfad.
Admodify.net

Grundsätzlich sollten Userprofile "irgendwo" auf einem Server liegen - aber garantiert nicht auf dem c:\! ...
(Auch wenn man Kontigente benutzt) - dann "klappt" das auch ohne Robocopy mit einem Image (das kein Backup ist/ersetzt) - aber für den Fall eindeutig die bessere Wahl ist.

Gruß

@ Bastla: Die Idee mit den Usern und einer Datei ist gut face-wink
nicht @bastla (der weiß das eh)
Mittels eines Findstr /v am ende könnte man auch den umgezogenen User aus der Liste der delinquenten löschen.

Aber wie bereits an anderer Stelle geschrieben - ich bin Pessimist - oder andersherum Optimist mit Lebenserfahrung face-wink
Member: Hugi1987
Hugi1987 Oct 05, 2009 at 07:18:18 (UTC)
Goto Top
Zitat von @bastla:
Hallo Hugi1987!

Etwa so (ungetestet):
@echo off & setlocal
> set "Liste=D:\Benutzer.txt"  
> 
> for /f "usebackq delims=" %%i in ("%Liste%") do  
> set "Benutzer=%%i" & call :ProcessUser  
> echo Fertig.
> goto :eof
> 
> :ProcessUser
> echo es wird geprueft ob Benutzer noch angemeldet ist...
> net file|findstr "%Benutzer%" && (echo Abbruch, da  
> Benutzer noch angemeldet ist! & goto :eof)
> 
> :Kopieren
> echo Benutzerprofil wird nun kopiert...
> robocopy \\ServerA\c$\%Benutzer% \\ServerB\c$\%Benutzer% /mir /R:5
> /W:5
> 
> :Freigabe
> echo Freigabe wird nun entfernt...
> net share Freigabe$ /delete
> 
> :Ende
> echo Profil erfolgreich kopiert!
> goto :eof
> 
In der Textdatei muss je Zeile ein Benutzer eingetragen sein.

Das Entfernen der Freigabe ist mir nicht ganz klar - hab's daher
mal so gelassen, wie Du es vorher angeführt hattest ...

Grüße
bastla

Hey,
erstmal danke euch beiden für die Info...
leider funktioniert die Prüfung ob der Benutzer angemeldet ist nicht. Der Script läuft einfach weiter an dieser Stelle weiter.
Hast du eine Idee?

Gruß hugi1987
Member: Hugi1987
Hugi1987 Oct 05, 2009 at 08:10:13 (UTC)
Goto Top
Hey,
erstmal danke euch beiden für die Info...
leider funktioniert die Prüfung ob der Benutzer angemeldet ist nicht.

:ProcessUser
echo es wird geprueft ob Benutzer noch angemeldet ist...
net file|findstr "%Benutzer%" && (echo Abbruch, da
Benutzer noch angemeldet ist! & goto :eof)

Der Script läuft einfach weiter an dieser Stelle weiter.
Hast ihr eine Idee?

Gruß hugi1987
Mitglied: 60730
60730 Oct 05, 2009 at 08:19:38 (UTC)
Goto Top
Servus,

wenn du es nicht so machst, sondern so wie ich es (schon öfters gemacht habe) - dann brauchst du das mit der Abfrage nicht.

Die Zeit, die du mit meinem Weg (den ich mir bestimmt nicht allein ausgedacht habe) - sparst + die Probleme, die man mit dem Weg nicht hat - da wärst du heute schon fertig face-wink

Nächstes Wochenende kommt ja noch face-wink

Bedenke alleine meine Zeile mit dem erneuten Findstr, dass unbedingt nötig ist

  • wenn die Daten kopiert nicht verschoben
  • wenn es einen "gewollten" Abbruch" (weil User angemeldet ist) gibt.

Dein Weg - den Bastla dir geebnet hat - ist Murks!!


btw: nur für den Fall der Fälle - im Findstr würde ein /i fehlen - denn die User melden sich seltenst genau so an, wie Sie in einer Liste stehen ;.-)
Vorname.Nachname

Gruß