Jump to content

Script Problem, Suche aller PST Dateien auf Client mit anschließendem umbenennen


Direkt zur Lösung Gelöst von BOfH_666,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Liebe Community,

 

ich bin gerade an einem Problem dran wo ich einfach nicht weiter komme.
Ein Tipp riet mir mich an diese Community zu wenden.

 

Folgendes Szenario:

Kunde X hat 5000 Mitarbeiter. Viele Mitarbeiter haben noch als Backup eine PST-Datei lokal auf dem Client abgelegt. Diese müssen mit dem PST-Sammlungs-Tool eingesammelt und an einem zentralen Platz abgelegt werden. Dort dann mit Hilfe von AZCopy zur Blob Storage hochladen und mit der Zuordnungsdatei die PSTs in die jeweiligen Postfächer migrieren.

 

Das Problem an der Sache ist. Sammelt das Tool alle PST Dateien ein besteht die Möglichkeit, dass diese alle Backup.pst heißen. Um die PST Dateien aber zuordnen zu können brauchen sie einen Namen der den Besitzer identifiziert.

 

1. Ich weiß nicht wie die Benutzer die PST Datei benannt haben,

2. Ich kenne den genauen Ablageort nicht.

 

Meine Lösung:

Ich habe angefangen ein Script zu schreiben, welches beim Login Laufwerk C und D nach PST Dateien durchsucht, beim Fund den Pfad in eine Variable schreibt und anschließend die Datei dann so benennt, dass man sie der Person zuordnen kann.

 

@echo off
for /f "tokens=*" %%a in ('dir /b /s c:\"*.pst"') do set PSTDATEI=%%a
Pause
echo Ausgabe ist: %PSTDATEI%
PAUSE
ren %PSTDATEI% %USERNAME%%COMPUTERNAME%.pst

for /f "tokens=*" %%a in ('dir /b /s d:Temp\"*.pst"') do set PSTDATEID=%%a
PAUSE
echo Ausgabe ist: %PSTDATEID%
PAUSE
ren %PSTDATEID% %USERNAME%2%COMPUTERNAME%.pst

 

Pause und echo sind im Moment nur für mich zum testen.

 

 

Mein Problem:

Wenn ich jetzt allerdings mehrere PST Dateien auf einem Laufwerk liegen habe, schreibt er nur die erste gefundene in eine Variable. Ich kann mir sehr gut vorstellen, dass über die for Schleife die Möglichkeit besteht jeden Fund in eine separate variable zu schreiben! Ich bin aber beim Thema Deep Programmierung/Scripten leider nicht sehr gut und hoffe, dass mir jemand von euch helfen könnte. Vermutlich gibt es auch die Möglichkeit in einer Schleife alle Laufwerke zu durchsuchen..aber ich hab einfach keine Lösung dazu gefunden.

 

 

Vielen Dank im Voraus!

 

Liebe Grüße, Kilian

 

bearbeitet von Kilian
Link zu diesem Kommentar
vor 2 Minuten schrieb Nobbyaushb:

Hallo Nobbyaushb,

 

danke für deine Antwort. Genau das Tool verwende ich ja schlussendlich um die PST Files dann einzusammeln. Das Problem ist, dass ich vor dem einsammeln der PST Dateien, diese erst umbenennen muss, damit sie nach dem einsammeln auch noch zuzuordnen sind. Es ist nämlich anzunehmen, dass die meisten den Namen der PST auf Default gelassen haben und dieser lautet eben Backup.pst. Nach dem einsammeln könnte ich das nicht mehr verwerten.

Deswegen benötige ich das Script.

Link zu diesem Kommentar
vor einer Stunde schrieb Kilian:
 

Meine Lösung:

Ich habe angefangen ein Script zu schreiben, welches beim Login Laufwerk C und D nach PST Dateien durchsucht, beim Fund den Pfad in eine Variable schreibt und anschließend die Datei dann so benennt, dass man sie der Person zuordnen kann.

Damit ist die jeweilige PST-Datei in Outlook aber sofort nicht mehr benutzbar, oder? Outlook bekommt ja von der Aktion nix mit, richtig?

vor einer Stunde schrieb Kilian:

Wenn ich jetzt allerdings mehrere PST Dateien auf einem Laufwerk liegen habe, schreibt er nur die erste gefundene in eine Variable. Ich kann mir sehr gut vorstellen, dass über die for Schleife die Möglichkeit besteht jeden Fund in eine separate variable zu schreiben! Ich bin aber beim Thema deep programming leider nicht sehr gut und hoffe, dass mir jemand von euch helfen könnte. Vermutlich gibt es auch die Möglichkeit in einer Schleife alle Laufwerke zu durchsuchen..aber ich hab einfach keine Lösung dazu gefunden.

Also beim "deep programing" wär ich auch raus, aber bei Powershell könnt ich bestimmt helfen ... und viele andere Forenmitglieder bestimmt auch.  ;-) 

Link zu diesem Kommentar
vor 16 Minuten schrieb BOfH_666:

Damit ist die jeweilige PST-Datei in Outlook aber sofort nicht mehr benutzbar, oder? Outlook bekommt ja von der Aktion nix mit, richtig?

Also beim "deep programing" wär ich auch raus, aber bei Powershell könnt ich bestimmt helfen ... und viele andere Forenmitglieder bestimmt auch.  ;-) 

Hallo @BOfH_666,

 

danke für deine Antwort. Im Prinzip ist es Scripten aber für mich ist alles was mit Schleifen zu tun hat schon programmieren (sorry falsch ausgedrückt). 

Viele Wege führen nach Rom. Wenn jemand von euch eine Lösung hätte wie man es mit Powershell Scripten kann, wäre ich natürlich auch sehr dankbar.

 

Die PST Dateien sind nicht mehr aktiv eingebunden. Das sind quasi "Backup" PST Dateien.

 

Liebe Grüße, Kilian

bearbeitet von Kilian
Link zu diesem Kommentar
  • Beste Lösung
vor 18 Minuten schrieb Kilian:

. Im Prinzip ist es Scripten aber für mich ist alles was mit Schleifen zu tun hat schon programmieren (sorry falsch ausgedrückt). 

Das sollte nur ein Spaß sein ... ich hatte das schon so verstanden. 

vor 18 Minuten schrieb Kilian:

Viele Wege führen nach Rom. Wenn jemand von euch eine Lösung hätte wie man es mit Powershell Scripten kann, wäre ich natürlich auch sehr dankbar.

Die Aufgabe klingt danach, als würdest Du wenigstens gelegentlich davon profitieren, wenigstens Basis-Kenntnisse im Scripten zu haben. Ich kann Dir nur empfehlen, Dir die Grundlagen von Powershell anzueignen. Es würde sich auf jeden Fall für Dich lohnen.  ... und es ist nicht schwer.  ;-) 

 

Mit dem folgenden Schnipsel würdest Du z.B. auf allen lokalen Laufwerken nach *.PST-Dateien suchen und diese dann jeweils nach C:\Users kopieren. Man könnte sie natürlich auch gleich verschieben.

$LocalDriveList = (Get-CimInstance -ClassName CIM_LogicalDisk | Where-Object {$_.DriveType -eq 3}).DeviceID | ForEach-Object {"{0}\" -f $_}

Get-ChildItem -Path $LocalDriveList -Filter *.pst -Recurse -Force -ErrorAction SilentlyContinue |
    ForEach-Object {
        $NewName = $Env:COMPUTERNAME + '_' + $Env:USERNAME + '_' + ($_.FullName -replace ':' -replace '\\','_')
        $Destination = Join-Path -Path C:\Users -ChildPath $NewName
        Copy-Item -Path $_.FullName -Destination $Destination
    }

Dabei setzen sich die neuen Namen am neuen Ablageort aus dem Computernamen, dem Usernamen und dem ursprünglichen Pfad zusammen. So ist eine Zuordnung möglich und man kann sogar nachvollziehen, wo die Dateien ursprünglich gelegen haben.

Link zu diesem Kommentar
vor 23 Minuten schrieb BOfH_666:

Das sollte nur ein Spaß sein ... ich hatte das schon so verstanden. 

Die Aufgabe klingt danach, als würdest Du wenigstens gelegentlich davon profitieren, wenigstens Basis-Kenntnisse im Scripten zu haben. Ich kann Dir nur empfehlen, Dir die Grundlagen von Powershell anzueignen. Es würde sich auf jeden Fall für Dich lohnen.  ... und es ist nicht schwer.  ;-) 

 

Mit dem folgenden Schnipsel würdest Du z.B. auf allen lokalen Laufwerken nach *.PST-Dateien suchen und diese dann jeweils nach C:\Users kopieren. Man könnte sie natürlich auch gleich verschieben.


$LocalDriveList = (Get-CimInstance -ClassName CIM_LogicalDisk | Where-Object {$_.DriveType -eq 3}).DeviceID | ForEach-Object {"{0}\" -f $_}

Get-ChildItem -Path $LocalDriveList -Filter *.pst -Recurse -Force -ErrorAction SilentlyContinue |
    ForEach-Object {
        $NewName = $Env:COMPUTERNAME + '_' + $Env:USERNAME + '_' + ($_.FullName -replace ':' -replace '\\','_')
        $Destination = Join-Path -Path C:\Users -ChildPath $NewName
        Copy-Item -Path $_.FullName -Destination $Destination
    }

Dabei setzen sich die neuen Namen am neuen Ablageort aus dem Computernamen, dem Usernamen und dem ursprünglichen Pfad zusammen. So ist eine Zuordnung möglich und man kann sogar nachvollziehen, wo die Dateien ursprünglich gelegen haben.

 

vor 23 Minuten schrieb BOfH_666:

Das sollte nur ein Spaß sein ... ich hatte das schon so verstanden. 

Die Aufgabe klingt danach, als würdest Du wenigstens gelegentlich davon profitieren, wenigstens Basis-Kenntnisse im Scripten zu haben. Ich kann Dir nur empfehlen, Dir die Grundlagen von Powershell anzueignen. Es würde sich auf jeden Fall für Dich lohnen.  ... und es ist nicht schwer.  ;-) 

 

Mit dem folgenden Schnipsel würdest Du z.B. auf allen lokalen Laufwerken nach *.PST-Dateien suchen und diese dann jeweils nach C:\Users kopieren. Man könnte sie natürlich auch gleich verschieben.


$LocalDriveList = (Get-CimInstance -ClassName CIM_LogicalDisk | Where-Object {$_.DriveType -eq 3}).DeviceID | ForEach-Object {"{0}\" -f $_}

Get-ChildItem -Path $LocalDriveList -Filter *.pst -Recurse -Force -ErrorAction SilentlyContinue |
    ForEach-Object {
        $NewName = $Env:COMPUTERNAME + '_' + $Env:USERNAME + '_' + ($_.FullName -replace ':' -replace '\\','_')
        $Destination = Join-Path -Path C:\Users -ChildPath $NewName
        Copy-Item -Path $_.FullName -Destination $Destination
    }

Dabei setzen sich die neuen Namen am neuen Ablageort aus dem Computernamen, dem Usernamen und dem ursprünglichen Pfad zusammen. So ist eine Zuordnung möglich und man kann sogar nachvollziehen, wo die Dateien ursprünglich gelegen haben.

Lieber @BOfH_666. Ich glaube meine vorherige Antwort hat es nicht gespeichert. Vielen herzlichen Dank für deine Hilfe. Das ist genau das was ich gesucht habe. Ich wünschte ich könnte soviel know how im Scripten an den Tag legen wie du!

Link zu diesem Kommentar
vor 16 Minuten schrieb Kilian:

Ich wünschte ich könnte soviel know how im Scripten an den Tag legen wie du!

Das lässt sich relativ leicht erreichen. Die Grundlagen von Powershell sind ziemlich einfach und der Rest kommt mit ein bissl Übung. Einfach erstmal anfangen.

Für den Anfang kannste Dich ja erstmal ein bissl "berieseln" lassen ...

 

Getting Started with PowerShell 3.0

 

und zum Nachschlagen und Nachlesen:

 

Windows PowerShell™ 4: TFM

 

.... beides konstenlos und geeignet für Anfänger.

 

bearbeitet von BOfH_666
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...