Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PowerShell - Postfach-Datenbank bereinigen

Frage Entwicklung Batch & Shell

Mitglied: tray-park

tray-park (Level 1) - Jetzt verbinden

08.07.2010, aktualisiert 12:15 Uhr, 6130 Aufrufe, 5 Kommentare

Ich möchte die Postfach-Datenbank auf einem Exchange 2010 mit hilfe eines PowerShell Skripts bereinigen.

Hi,

ich habe ein Skript, welches automatisiert PST-Dateien in ein Postfach importiert.

Es erstellt ein Postfach und importiert die Mails aus der PST.
Dann werden die Mails mit einem Fremdprogramm aus dem Postfach archiviert und das Postfach wird wieder deaktiviert.

Deaktiviert wird es, damit das Posfach beim Aktivieren wieder leer ist.
(ich nenne es hier mal "Import-Skript")

Das funktioniert auch soweit sehr gut (Dank der großartigen Hilfe von Miyamoto).

Nun ist das Problem aufgetreten, dass mir die Festplattenkapazität nicht ausreicht um mit dem Import-Vorgang fortfahren zu können.

Ist ja auch logisch, da das Postfach beim deaktivierten als getrenntes Postfach weiter besteht, somit aber unnötig Speicher einnimt.

Nun habe ich ein kleines Skript geschrieben (ich nenne es hier mal "Bereinigungs-Skript") , welches

- das Postfach, in welches die PST-Dateien geladen werden, deaktiviert,
- die Postfachdatenbankbereitstellung aufhebt,
- die Datenbank-Datei samt übergeordnetem Ordner löscht
- eine neue Datenbank erstellt
- diese dann bereit stellt
- und das Postfach wieder aktiviert.
01.
$user="Migration" 
02.
$dbExt=".edb" 
03.
$dbAlt="Migration" 
04.
$dbNeu="Migration" 
05.
$dbPath="D:\Microsoft\Exchange Server\V14\Mailbox\" 
06.
$dbServ="Server" 
07.
 
08.
	Disable-Mailbox -Identity $user -Confirm:$false 
09.
	Remove-MailboxDatabase $dbAlt -Confirm:$false 
10.
	Remove-Item -Path $dbPath$dbAlt -recurse -Confirm:$false 
11.
	New-MailboxDatabase -Name $dbNeu -EdbFilePath $dbPath$dbNeu"\"$dbNeu$dbExt -LogFolderPath $dbPath$dbNeu -Server $dbServ 
12.
	Write-Host "|      Datenbank $dbneu erstellt     |" -ForegroundColor Yellow 
13.
	Mount-Database $dbNeu 
14.
	Write-Host "|       Datenbank $dbneu bereit      |" -ForegroundColor Yellow 
15.
	Enable-Mailbox -Identity $user -Confirm:$false -Database $dbNeu
Dann gibt es noch ein kleines Skript, welches die getrennten Postfächer aus der Liste der "Getrennten Postfächer" entfernt
01.
$db = "mailbox" 
02.
Get-MailboxStatistics -database $db | where {$_.disconnectdate -ne $null} | foreach {Remove-mailbox -database $_.database -storemailboxidentity $_.mailboxguid -Confirm:$false}
Sehr elegant ist diese Variante allerdings nicht, Speicherplatz zu schaffen. Da es auch etwas zeitaufwendig und umständlich ist.

Hat jemand eine Idee, wie dies ... sagen wir mal "professioneller" geschehen kann?

Und / oder . . . .

Es wäre auch schön, wenn man in das Import-Skript etwas einbauen könnte, was sobald die Platte voll ist, das Bereinigungs-Skript ausführt, ohne, dass der Import-Vorgang abgebrochen wird.

Das einfachste wäre natürlich, eine riesige Platte einzubauen und die Postfach-Datenbank dort bereit zu stellen. Aber leider steht das momentan nicht als Option zur Verfügung.

Freue mich über jede Rückmeldung.

Grüße



Tray
Mitglied: Miyamoto
09.07.2010 um 14:31 Uhr
Hi,
was kannst du machen kannst ist z.B. eine schleife durchlaufen lassen die immer schaut ob genug freier Speicher vorhanden ist.

In dem Beispiel musst du allerdings wissen wie viel freien Speicher du so ca. brauchst.
01.
# hier die Festplatte auswählen, die man über prüfen möchte 
02.
$my_hdd="D:" 
03.
# 0 = nicht genug speicher frei 
04.
$freespaceok=0 
05.
 
06.
# es muss mindestens so viel MB frei sein 
07.
$mb=10 
08.
 
09.
# vor dieser zeile muss deine Schleife herum, die die Dateien einliest ___Anfang der schleife 
10.
 
11.
For ($x=1; $x -le 5; $x++) # es wird max 5 mal geschaut ob genug freier speicher vorhanden ist 
12.
{  
13.
    $hdd=gwmi win32_logicaldisk -filter "drivetype=3" | select DeviceID,@{Name="FreeSpace";Expression={"{0:N1}" -f ($_.FreeSpace/1mb)}} 
14.
    foreach ($i in $hdd){ 
15.
 
16.
        if ($i.DeviceID -eq $my_hdd) { 
17.
     
18.
            if ($i.FreeSpace -le $mb) {  
19.
         
20.
                Write-Host "es ist nicht genug platz" 
21.
                Write-Host $i.DeviceID $i.FreeSpace 
22.
                $freespaceok=0 
23.
 
24.
                # hier muss dein "Bereinigungs-Skript" hinein 
25.
                 
26.
            } ElseIf ($i.FreeSpace -ge $mb) {  
27.
                $freespaceok=1 
28.
                $x=10 
29.
30.
31.
32.
33.
 
34.
 
35.
if ($freespaceok -eq 1) { 
36.
    # hier muss dein import rein 
37.
    Write-Host "starte import" 
38.
} ElseIf ($freespaceok -eq 0) { 
39.
    Write-Host "Die Festplatte ist voll!!!" 
40.
    # abruchbedingung deiner schleife, die du noch ein bauen must 
41.
42.
 
43.
$freespaceok=0 
44.
# nach dieser zeile muss deine Schleife enden ___Ende der schleife
ich hoffe es ist einiger maßen verständlich ^^

Gruß Miyamoto
Bitte warten ..
Mitglied: tray-park
12.07.2010 um 09:34 Uhr
Bis auf
01.
    $hdd=gwmi win32_logicaldisk -filter "drivetype=3" | select DeviceID,@{Name="FreeSpace";Expression={"{0:N1}" -f ($_.FreeSpace/1mb)}} 
versteht sich das Ganze von selbst.

Aber die Schleife muss ich anders setzen, da das Import-Skript ja selbst in einer läuft. D.H. Wenn ich das Import-Skript an der von dir markierten Stelle
01.
$mb=10  
02.
# IMPORT-SKRIPT 
03.
For ($x=1; $x -le 5; $x++) # es wird max 5 mal geschaut ob genug freier speicher vorhanden ist
einfüge, kommt es ja nie zur Speicherkapazitätsüberprüfung oder?
Bitte warten ..
Mitglied: Miyamoto
12.07.2010 um 10:27 Uhr
Hi,
ich meinte damit das du das Import Skript auseinander bauen musst.
in deinem Import Skript liest du doch die pst Dateien mit einer schleife ein oder???

Diese Schleife muss in Zeile 9 beginnen und endet in Zeile 44
Das was du innerhalb der schleife machst (Import Skript) kommt in Zeile 36
Dein Bereinigungsskript kommt in Zeile 24

Der Ablauf sollte den der folgende sein:
  1. Schleife liest Datei ein (läuft so lange wie Dateien da sind)
  2. Speicher Überprüfungsschleife (läuft max 5 mal durch, pro Datei)
    1. Nicht genug Speicher frei, variable $freespaceok=0, Bereinigung beginnt, noch mal schleife durchlaufen und schauen ob genug Speicher frei ist
    2. Genug Speicher frei, variable $freespaceok=1, Abbruch der "Speicher Überprüfungsschleife"
  3. $freespaceok
    1. $freespaceok=1
      1. genug Speicher frei, Import
    2. $freespaceok=0
      1. nicht genug Speicher frei, kein Import, Abbruch der einlese Schleife

    Gruß Miyamoto
Bitte warten ..
Mitglied: tray-park
19.07.2010 um 14:01 Uhr
Hi,

das funktioniert prächtig. Ich komm aber immer noch nicht drauf, was hinter
01.
$hdd=gwmi win32_logicaldisk -filter "drivetype=3" | select DeviceID,@{Name="FreeSpace";Expression={"{0:N1}" -f ($_.FreeSpace/1mb)}} 
steckt.
Bitte warten ..
Mitglied: Miyamoto
19.07.2010 um 16:21 Uhr
Hi,
also
Code Beschreibung
$hdd ist eine Variable
gwmi Get-WmiObject
gwmi win32_logicaldisk Zur Anzeige lokaler Laufwerks Informationen
-filter "drivetype=3" mit dem Filter werden nur noch Lokale Festplatten angezeigt, nicht mehr CD/DVD Laufwerk und so
| pipe-Zeichen
select hiermit kann man die Ausgabe noch weiter Einschränken die man übergeben bekommen hat von der pipe
DeviceID Laufwerksbustaube
@{Name="FreeSpace";Expression={"{0:N1}" -f ($_.FreeSpace/1mb)}} hiermit wird die freie Größe in MB angegeben

ich hoffe es ist einigermaßen verständlich

Gruß Miyamoto
Bitte warten ..
Ähnliche Inhalte
Windows Update
WSUS auf Server 2016 - Datenbank bereinigen?
gelöst Frage von PedantWindows Update3 Kommentare

Hallo, vor einiger Zeit hatte ich den WSUS neu installiert und dieses mal auf einen Server 2016. Ich hatte ...

Exchange Server
Exchange PowerShell Postfächer auslesen
Frage von DanielZ87Exchange Server7 Kommentare

Hallo zusammen :) gibt es via PowerShell einen Befehl um die Postfächer auszulesen? Ähnlich wie Get-MailboxDatabase Ich möchte als ...

Batch & Shell
Powershell Primäresmtpadresse an anderes Postfach übertragen
gelöst Frage von 124611Batch & Shell15 Kommentare

Guten Morgen, ich möchte gerne von ausgeschiedenen Benutzern, deren primäre SMTP Emailadresse an ein globales Postfach übertragen. Das globale ...

Batch & Shell
Powershell - Datenbank Oracle SQLPLUS
gelöst Frage von internet2107Batch & Shell1 Kommentar

Ich benötige Hilfe beim Zugriff auf eine Oracle DB. Es soll aus der Ferne (vom lokalen Client) ein spezieller ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Necur-Botnet soll Erpressungstrojaner Scarab massenhaft verbreiten

Information von BassFishFox vor 2 StundenErkennung und -Abwehr

12,5 Millionen Spam-Mails aus einem Bot-Netz mit 6 Millionen Computern? Eigentlich eine schwache Leistung. Die Erpresser setzen dabei auf ...

Microsoft

Nadeldrucker-Problem unter Windows - Microsoft liefert Updates

Information von BassFishFox vor 3 StundenMicrosoft

Hat ja nicht lange gedauert. Nachdem die November-Updates für Windows 7, 8.1 und 10 zahlreiche Nadeldrucker lahmgelegt hatten, stellt ...

Linux

Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde

Information von Frank vor 10 StundenLinux14 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 1 TagBatch & Shell9 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Heiß diskutierte Inhalte
Linux
Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde
Information von FrankLinux14 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Router & Routing
Zwei Netzwerke erstellen
Frage von bunteblumeRouter & Routing14 Kommentare

Hallo Zusammen, Ich möchte gerne ein backup von einem bestimmten Folder welcher auf dem Server regelmässig synchronisiert wird auf ...

Off Topic
Fachkräftemangel in Deutschland? - Talentschmiede schreibt alle 2 Tage die gleichen Stellen aus
Frage von Penny.CilinOff Topic12 Kommentare

Hallo, haben wir in Deutschland Fachkräftemangel? Die Talentschmiede schreibt gefühlt alle zwei Tage dieselben Stellen aus. Und das schon ...

Windows Server
Kann man im KMS nachschauen , wieviele Clients den Key in Anspruch genommen haben
gelöst Frage von rainergugusWindows Server12 Kommentare

Hallo, wir haben einen KMS Windows 10 Key. Dieser ist ja W7 kompatibel. Aber unser Windows 7 Pool registriert ...