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

Mitglied: tray-park

tray-park (Level 1) - Jetzt verbinden

08.07.2010, aktualisiert 12:15 Uhr, 6140 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
Windows 10

Neue Sicherheitslücke in Windows 10 (Version 1709) durch Google öffentlich geworden

Information von kgborn vor 10 StundenWindows 10

Vor ein paar Tagen haben Googles Sicherheitsforscher vom Projekt Zero eine Sicherheitslücke im Edge-Browser publiziert. Jetzt wurde eine weitere ...

iOS
IOS 11.2.6 verfügbar
Information von sabines vor 16 StundeniOS

Mit dem Update soll der Bug behoben werden, bei dem eine bestimmte Zeichenkette IOS zum Absturz gebracht hat.

Sicherheit
Sicherheitsrisiko: Die Krux mit 7-Zip
Information von kgborn vor 1 TagSicherheit8 Kommentare

Bei vielen Anwendern ist das Tool 7-Zip zum Entpacken von Archivdateien im Einsatz. Die Software ist kostenlos und steht ...

Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 1 TagInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Heiß diskutierte Inhalte
Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server25 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

LAN, WAN, Wireless
VPN Cisco ASA5505 PaloAlto PA-200
gelöst Frage von YannoschLAN, WAN, Wireless22 Kommentare

Hallo zusammen, ich würde gerne ein Site-to-Site VPN zwischen den beiden Standorten aufbauen. PaloAlto PA200 Internetanschluss Deutsche Telekom GK ...

SAN, NAS, DAS
Qnap TS-453S Pro - Anbindung Active Directory
Frage von JuckieSAN, NAS, DAS13 Kommentare

Hallo zusammen, ich habe hier eine Qnap TS-453S Pro die sich mal so absolut gar nicht in das Active ...