Benutzer mit den meisten Antworten
Nur Unterordner ab einem gewissen Änderungsdatum kopieren

Frage
-
Hallo Community,
Ich möchte für einen Umzug von Terminalservern ein Powershellscript erstellen, dass bestimmte Nutzereinstellungen der auf dem Quellserver lokal angelegten Nutzer in ein "Backup" auf einem Fileserver speichert. Dies aber nur für Benutzer, die nach einem bestimmten Datum darauf gearbeitet haben. Momentan habe ich dies:
###### Variablen ###### $destination = "\\ServerShare\BENUTZERPROFILE\Backups"; $folder = "Desktop", "Favorites", "AppData\Local\Google\Chrome\User Data", "AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\Taskbar"; $userprofiles = Get-ChildItem \\Quellserver\Users | % {$_.fullname}; ###### Backup erstellen ###### write-host "Erstelle Backups" foreach ($userprofile in $userprofiles) { foreach ($f in $folder) { $currentSourceFolder = $userprofile + "\" + $f; $temp = $userprofile.TrimStart("\\Quellserver\Users") $currentRemoteFolder = $destination + "\" + $temp + "\" + $f; #Copy-Item -ErrorAction silentlyContinue -recurse $currentLocalFolder $currentRemoteFolder } } write-host -ForegroundColor green "Backup abgeschlossen!"
Da ich in Powershell außer zur Erstellung von Logs noch nicht mit Timestamps gearbeitet habe, wäre ich über jeden anstoß dankbar. :)
Gruß, Joejoe
Antworten
-
Moin,
jetzt unabhängig vom verwendeten Kopier-Vehikel (ich würde ROBOCOPY nehmen, so sehr ich PowerShell auch liebe):
Du musst mal ganz genau schauen, wovon Du den Zeitstempel haben willst. Um zu beurteilen, wann sich ein User zuletzt angemeldet hat, würde ich die NTUSER.DAT untersuchen.
Aber ansonsten in PowerShell kannst Du in der ersten Schleife so etwas wie
if ((Get-Item "$userprofile\NTUSER.DAT").LastWriteTime -gt ((Get-Date).AddDays(-45))) { #alles andere }
wenn man die User haben will, die sich in den letzten 45 Tagen angemeldet haben.
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> http://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com- Als Antwort markiert Joejoearmany Mittwoch, 13. September 2017 08:10
-
Das Script zum Backup bestimmer Userdaten ist fertig. Vielen Dank dabei an Herr Smirnov für den Denkanstoß! Für den Fall, dass dies anderen Usern hilft, ist hier noch mal das Ganze Script:
###### Variablen ###### # Backup Ordner $destination = "\\Backupordner"; # Unterordner, die Kopiert werden sollen $folder = "Desktop", "Favorites", "AppData\Local\Google\Chrome\User Data", "AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\Taskbar"; #Quellordner, in dem die Nutzerprofile liegen $userprofiles = Get-ChildItem "\\Quellordner" | % {$_.fullname}; # Zeit in Tagen, die Maximal seit dem letzten Zugriff vergangen sein dürfen $Days = 90 ###### Backup erstellen ###### write-host "Erstelle Backups"; foreach ($userprofile in $userprofiles) { if((Get-Item $userprofile | Select-Object -ExpandProperty LastAccessTime) -gt ((Get-Date).AddDays(-$Days))) { $temp = (Get-Item $userprofile | % {$_.Name}); Write-Host ("Erstelle Backup von $temp") foreach ($f in $folder) { $currentSourceFolder = ($userprofile + "\" + $f); $currentRemoteFolder = ($destination + "\" + $temp + "\" + $f); Copy-Item -ErrorAction silentlyContinue -recurse $currentSourceFolder $currentRemoteFolder; } } } write-host -ForegroundColor green "Backup abgeschlossen!"
Wie bereits oben erklärt, gibt man den Ordner in dem die Userprofile liegen, den Backupordner, und die Zeit seit dem letzten Zugriff ein und dann kopiert das Script den Desktop, die Taskleisteneinstellungen, die IE Favoriten und die Chrome Einstellungen in das Backup.
- Als Antwort markiert Joejoearmany Mittwoch, 13. September 2017 08:09
- Bearbeitet Joejoearmany Mittwoch, 13. September 2017 08:09
Alle Antworten
-
Moin,
jetzt unabhängig vom verwendeten Kopier-Vehikel (ich würde ROBOCOPY nehmen, so sehr ich PowerShell auch liebe):
Du musst mal ganz genau schauen, wovon Du den Zeitstempel haben willst. Um zu beurteilen, wann sich ein User zuletzt angemeldet hat, würde ich die NTUSER.DAT untersuchen.
Aber ansonsten in PowerShell kannst Du in der ersten Schleife so etwas wie
if ((Get-Item "$userprofile\NTUSER.DAT").LastWriteTime -gt ((Get-Date).AddDays(-45))) { #alles andere }
wenn man die User haben will, die sich in den letzten 45 Tagen angemeldet haben.
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> http://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com- Als Antwort markiert Joejoearmany Mittwoch, 13. September 2017 08:10
-
Hallo Herr Smirnov,
Danke schonmal für die fixe Antwort. Ich habe bei deinem Vorschlag das Problem, dass dieser Befehl nur lokal vom Server funktioniert, und es momentan nur darum geht, bestimmte Ordner im Userprofil zu verschieben. Deshalb denke ich, wäre das Änderungsdatum des Userordners der sinnvollere Wert. Aber die Option
-gt ((Get-Date).AddDays(-45)))
kann ich dafür bestimmt benutzen. Das Probiere ich mal aus.
Gruß, Joejoe
-
Hier habe ich das Problem, dass der Parameter LastAccessTime nicht das Format Datum hat. =/
vgl. Snippet oben. Das hat wohl den Typ, man muss aber das Property angeben:
(Get-Item $userprofile).LastAccessTime
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> http://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com -
Das Script zum Backup bestimmer Userdaten ist fertig. Vielen Dank dabei an Herr Smirnov für den Denkanstoß! Für den Fall, dass dies anderen Usern hilft, ist hier noch mal das Ganze Script:
###### Variablen ###### # Backup Ordner $destination = "\\Backupordner"; # Unterordner, die Kopiert werden sollen $folder = "Desktop", "Favorites", "AppData\Local\Google\Chrome\User Data", "AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\Taskbar"; #Quellordner, in dem die Nutzerprofile liegen $userprofiles = Get-ChildItem "\\Quellordner" | % {$_.fullname}; # Zeit in Tagen, die Maximal seit dem letzten Zugriff vergangen sein dürfen $Days = 90 ###### Backup erstellen ###### write-host "Erstelle Backups"; foreach ($userprofile in $userprofiles) { if((Get-Item $userprofile | Select-Object -ExpandProperty LastAccessTime) -gt ((Get-Date).AddDays(-$Days))) { $temp = (Get-Item $userprofile | % {$_.Name}); Write-Host ("Erstelle Backup von $temp") foreach ($f in $folder) { $currentSourceFolder = ($userprofile + "\" + $f); $currentRemoteFolder = ($destination + "\" + $temp + "\" + $f); Copy-Item -ErrorAction silentlyContinue -recurse $currentSourceFolder $currentRemoteFolder; } } } write-host -ForegroundColor green "Backup abgeschlossen!"
Wie bereits oben erklärt, gibt man den Ordner in dem die Userprofile liegen, den Backupordner, und die Zeit seit dem letzten Zugriff ein und dann kopiert das Script den Desktop, die Taskleisteneinstellungen, die IE Favoriten und die Chrome Einstellungen in das Backup.
- Als Antwort markiert Joejoearmany Mittwoch, 13. September 2017 08:09
- Bearbeitet Joejoearmany Mittwoch, 13. September 2017 08:09