Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 6065 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Powershell Primäresmtpadresse an anderes Postfach übertragen (15)

Frage von 124611 zum Thema Batch & Shell ...

Windows 10
Powershell 5 BSOD (1)

Tipp von agowa338 zum Thema Windows 10 ...

Windows Server
Server 2012 R2 Cleanmgr.exe mit Systemdateien bereinigen? Wie? (2)

Frage von busteron zum Thema Windows Server ...

Batch & Shell
gelöst PowerShell Script Move-Item nach x Tagen (5)

Frage von lupolo zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...