Exchange 2010 SP1 Mailbox Move Statistics

Das Attribut „BytesTransferredPerMinute“ ist nur während eines Moves/Export gefüllt. Nach erfolgreichen Move/Export ist das Attribute wieder leer. Eine Statistic über die Performance der bereits verschobenen Mailboxen würde mich aber schon interessieren um daraus Rückschlüsse für weitere Move/Export-Requests ziehen zu können.

Ich habe mir dazu ein Script geschrieben, welches den Wert berechnet (Es kann natürlich beliebig erweitert werden):

Function Get-MailboxMoveStatistics {

$Requests = Get-MoveRequest|get-MoveRequestStatistics 
foreach($Request in $Requests ) {

$MBXSize  = $Request.BytesTransferred
$Duration = $Request.OverallDuration        
#-> Bei Werten kleiner 1 MB ist das Ergebnis immer 0. Deshalb neuer Ansatz
#     $MBAvg = $MBXSize.ToMB() / $Duration.TotalMinutes          
$MBAvg = ($MBXSize.ToBytes() / $Duration.TotalMinutes) / 1MB

New-Object PSObject -Property @{

Alias = $Request.Alias
MBXSize = $Request.BytesTransferred
OverallDuration = $Request.OverallDuration
„MBTransferredPerMinute“ = „{0:n2}“ -f $MBAvg   

         
}

}

}

Exchange 2010 Datenbankstatistik und Datenbank Größe ermitteln

Damit können die Größen der Datenbanken ermittelt werden. Wenn ein vordefiniertes Limit erreicht ist, dann wird ein Eventlog geschrieben, dass eine weitere Datenbank nötig ist.

Function Get-DatabaseStatistics { 
     $Databases = Get-MailboxDatabase -Status
     $Result = „“

     foreach($Database in $Databases) { 
         $DBSize = $Database.DatabaseSize 
         $MBCount = (Get-Mailbox -Database $Database.Name).Count 
         $MBAvg = $DBSize.ToBytes() / $MBCount            

 $Result += „Server`t`t`t: “ + $Database.Server.Name+[char]13+[char]10
 $Result += „Databasename`t`t: “ + $Database.Name+[char]13+[char]10
 $Result += „MailboxCount`t`t: “ + $MBCount +[char]13+[char]10
 $Result += „DatabaseSize (GB)`t`t: “ + „{0:n2}“ -f ($DBSize.ToBytes() / 1GB)  +[char]13+[char]10
 $Result += „WhiteSpace (MB)`t`t: “ + „{0:n2}“ -f ($Database.AvailableNewMailboxSpace.ToBytes() / 1MB)  +[char]13+[char]10
 $Result += „AverageMailboxSize (MB)`t: “ + „{0:n2}“ -f ($MBAvg / 1MB)  +[char]13+[char]10
 $Result += „LastFullBackup`t`t: “ + $Database.LastFullBackup        +[char]13+[char]10

 $result +=  [char]13+[char]10

     } 
     return $Result

 } 
  
Function Get-DBSize($SITE){
 $Faktor        = 1GB      # Darstellung in MB oder GB….
 $MaxDBSize     = (100 * $Faktor)    # Maximale Größe der Datenbank in MB oder GB je nach Faktor, Default 100 xB….
 $HighWaterMark = ($MaxDBSize * 0.8 / $Faktor)   # Ab wann soll gewarnt werden (80% default)
 $DBCounter     = 0
 $lNewDB=$TRUE
 $Result = „“
 
 $MaxDBSize     = (100 * $Faktor)/$Faktor

 
 #Sucht nur ZDx Datenbanken
 ForEach($Database in Get-MailboxDatabase ZD* -Status|Sort-Object Name)
 { $DBCounter = $DBCounter +1
  $DBSize        = ($Database.DatabaseSize.ToBytes() / $Faktor)
  # Passt in diese Datenbank noch eine Mailbox rein?
  
  write-host $Database.Name
  write-host $DBSize
  write-host $HighWaterMark
  if ($DBSize -lt $HighWaterMark)
  {              
   $lNewDB = $False   
   # Wenn noch eine reinpasst, dann muss keine NewDB angelegt werden ($False)
   break     
   # Schleife kann nun schon beendet werden
  }
 }
 # das neue Postfach hat in keine DB reingepasst, also muss eine neue DB angelegt werden
 if ($lNewDB -eq $True) {
  $Help= „Alle {2} -Datenbanken sind zu mehr als {0} % belegt. Maximale Datenbankgröße {1:n2} MB. Neue {2} -Datenbank wird benötigt.“ -f $HighWaterMark, $MaxDBSize, $Site
#write-host $Help
write-eventlog -logname Application -source „MSExchangeStatistic“ -eventID 997 -entrytype Warning -message $help

 }
}
Function SendMail($MessageBody){

 $emailFrom = From@domain.de
 $emailTo = Empfaenger@domain.de
 $subject = „Database Statistics“
 $body = $MessageBody
 $smtpServer = „Mailserver.domain.de“
 $smtp = new-object Net.Mail.SmtpClient($smtpServer)
 $smtp.Send($emailFrom, $emailTo, $subject, $body)
}

########################################################################################################################

$result = Get-DatabaseStatistics
write-eventlog -logname Application -source „MSExchangeStatistic“ -eventID 998 -entrytype Information -message $result
SendMail($result)

Get-DBSize(„ZD“)
Get-DBSize(„VB“)

 exit

Exchange 2010 MailTipsExternal und Group Metrics

Get-OrganizationConfig |fl *tips*
MailTipsExternalRecipientsTipsEnabled : False
MailTipsLargeAudienceThreshold        : 25
MailTipsMailboxSourcedTipsEnabled     : True
MailTipsGroupMetricsEnabled           : True
MailTipsAllTipsEnabled                : True

Um die GroupMetrics wird benötigt, um die Anzahl der Mitglieder in einer Mailgruppe zu ermitteln. Um keine Online-Abfrage der Gruppenmitglieder machen zu müssen, wird jeden Tag um xx:xx Uhr die Liste der Gruppenmitglieder neu generiert. Dazu muss der MBX-Server konfiguriert werden:

Set-MailboxServer EXCH2010-SRV1 -GroupMetricsGenerationEnabled:$true

Der Dienst „Microsoft Exchange Service Host“ ist dafür verantwortlich. Er kopiert das Ergebnis auf den/die CAS Server in das Verzeichnis %ProgramFiles%\Miccrosoft\Exchange Server\V14\ClientAccess\GroupMetrics.

Wenn man einem User das Recht genommen hat, an einen Empfänger Mails zu senden, erscheint dies ebenfalls als MailTips Meldung.
(Set-Mailbox UaserA -RejectMessageFromSendersOrMembers UserB bedeutet, dass UserB keine Mails mehr an UserA senden darf.)

Zusätzlich kann man sich selbst auch Custom MailTips erstellen:

(mit Set-Mailbox und Set-DistributionGroup)

Set-Mailbox UserB –Mailtip “Sind Sie sicher, dass sie mir eine Mail senden müssen ? :-)”

Exchange 2010 Relay für Anonyme Sender/Empfänger einrichten

Damit der durch die GUI angelegte Receive Connector auch wirklich nach extern relay macht, muss ein Recht „Accept any recipient“ am Connector hinzugefügt werden. Das geht nicht mittels GUI, sondern entweder mit ADSIEdit.msc (u.a. siehe hier: „Exchange 2007 Receive Connector Authentication“ ) oder  mit dem Powershellbefehl:

Get-ReceiveConnector „Anonymous Relay“ | Add-ADPermission -User „NT AUTHORITY\ANONYMOUS LOGON“ -ExtendedRights „Ms-Exch-SMTP-Accept-Any-Recipient“

Update: 2012.06.28: Oder in den Sicherheitseinstellungen des Anonymous-Relay-Receive-Connectors den Punkt „Submit Messages to any Recipients“ auf Allow setzen.

Update: 2012.09.28: in Deutsch:  „NT-AUTORITÄT\ANONYMOUS-ANMELDUNG“

Exchange 2010 mit Outlook 2003 Ordneransicht wird nicht aktualisiert

Die UDP Registrierung zwischen Exchange 2010 und Outlook 2003 wird nicht mehr unterstützt, so dass der Client auf sein Polling Verfahren zurück fällt. Das kann bis zu 1 Minute dauern. So lange wird die Ansicht in Outlook nicht aktualisiert.
Lösunge 1.) Outlook im Cached Mode verwenden, Lösung 2.) Die Pollzeit etwas heruntersetzen (Artikel von MS: http://support.microsoft.com/kb/2009942/en-us)

Exchange 2010 mit Outlook vor Version 2007 / RPC Verschlüsselung

Bei der Migration nach Exchange 2010 kann es bei älteren Outlook Clients zu Verbindungsproblemen kommen. Das liegt dann u.U. daran, dass die Verbindung über RPC vom CAS Server verschlüsselt angefordert wird, das per Default nicht aktiviert ist.
Es gibt mehrere Lösungsansätze, der schnellste Weg ist einfach die Verschlüsselungsanforderung auf allen CAS Serven zu deaktivieren.

Set-RpcClientAccess –Server –EncryptionRequired $False

Weitere Infos hier: http://support.microsoft.com/kb/2006508/en-us

Exchange 2007 Transport Agent (RoutingAgent) VB.NET selbst gemacht

Seit Exchange 2007 gibt es die Möglichkeit, auf dem Hub-Transportserver Regeln einzurichten. (Ähnlich wie in Outlook)

Leider hat Microsoft die maximale Größe für den Regelspeicher auf 8k beschränkt. Viele Regeln passen da nicht rein, insbesondere wenn die Regeln viel Inhalt (Mailadressen oder Wörter) enthalten.

Als Lösung/Workaround wird deshalb ein Transport Agent vorgeschlagen.

Hier eine Lösung für einen RoutingAgent, der Mailverteiler nur im BCC Feld zulässt. Sollte ein Mailverteiler in To oder CC verwendet werden, wird die Nachricht zurückgeschickt. Die Gruppen werden anhand des Active Directory Attributes „msExchRequireAuthToSendTo“ gefiltert, welches auf TRUE stehen muss. „Exchange 2007 Transport Agent (RoutingAgent) VB.NET selbst gemacht“ weiterlesen

Exchange 2007 Message Tracking

Mich nervt diese umständliche Eingabe an Informationen beim Message Tracking. Ich brauche eine Quick and Dirty Lösung, da zu 95% immer nach Sender, Empfänger und Betreff in einem Bestimmten Zeitraum gesucht wird. Die Angabe des Servers (Hub oder MBX) soll automatisch (immer) erfolgen.

Schnell mal eine Lösung mit Powershell gebastelt, somit leicht modifizierbar! (Suchen über mehrere Tage würde das Zeitfenster pro Tag auf die angegebenen Zeiten beschränken. Da muss ich mir noch was überlegen, wie der LogParser wirklich Date+Time erkennen kann.)

Hier gehts zum script…. „Exchange 2007 Message Tracking“ weiterlesen

Exchange 2007 Receive Connector Authentication

Einschränkungen am Receive Connector. Hier kann man festlegen, welche Systeme/User Mails am HUB Transport Server (Receive Connector) abgeben dürfen/können.

Wichtig, die Berechtigungen müssen auf dem Connector im Active Directory gesetzt werden. Dazu den ADSIEdit.msc verwenden und den entsprechenden Receive Connector in Configuration/Services/Microsoft Exchange//Administrative Groups/Exchange Administrative Group (FYDIBOHF23SPDLT) /Servers//Protocols/SMTP Receive Connector auswählen und die Sicherheitseinstellungen öffnen.

Receive Connector Security

Den Gewünschten Benutzer hinzufügen und folgende Rechte vergeben:

Receive Connector Berechtigungen

Weitere Infos gibts hier: http://technet.microsoft.com/en-us/library/aa996395.aspx

 

Exchange 2007 auf Windows Server 2008

Weil ich es immer wieder googeln muss, hier endlich mal die Links:

How to Install Exchange 2007 SP1 Prerequisites on Windows Server 2008 or Windows Vista
http://technet.microsoft.com/en-us/library/bb691354.aspx

How to Create a Windows Server 2008 Failover Cluster for Cluster Continuous Replication
http://technet.microsoft.com/en-us/library/bb676403.aspx

The installation of the Exchange Server 2007 Hub Transport role is unsuccessful on a Windows Server 2008-based computer
http://support.microsoft.com/kb/952842/en-us

(watch the „Fix it for me“ 🙂 )

Exchange 2003 SP2 / ActiveSync push mail notification / Firewall

Vor kurzem stellte ich fest, dass EAS nur richtig funktioniert, wenn vom BackEnd Server zum FrontEnd Server der Port 2883 (udp) geöffnet ist. Nur dann ist ein aktives pushen möglich.

Warum ich das nicht früher festgestellt habe? Weil ich bisher immer nur mit good gepushed habe. EAS habe ich nur zu Testzwecken mal aktiviert.

Outlook Client durch eine Firewall an Exchange anbinden

Zur Info:

Exchange als Proxy verwenden
GC referral ausschalten:

You can disable referrals altogether and force smart clients to use proxying. To do so, add the No RFR Service REG_DWORD value to the HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSExchangeSA\Parameters registry subkey on the Exchange 2000 server and set the value to 0x1.

Ansonsten werden die smart Clients (Outlook 2000 und höher) durch den Exchange mit einer Liste an verfügbaren GCs versorgt. Der Client benötigt dann direkten Zugriff auf den Domaincontroller (Firewall Ports beachten!). Wenn das nicht klappt, versucht es Outlook so lange bei allen GCs, anschließend macht es dann doch der Exchange direkt. Das kann u.U. jedoch schon einige Nerven kosten.Matthias

Mit DS Proxy Service:   

Mit DSProxy

 

  

ohne DS Proxy Service (RegKey):

Ohne DSProxy

 

  

Mehr Infos gibt es unter diesem Link.         

 

CAS Exchange 2007 Kennwortänderung über OWA für Postfächer die noch auf Exchange 2003 sind

Durch den CAS Server besteht ab Exchange 2007 nicht mehr die Möglichkeit der Kennwortänderung. Ein Benutzer mit Postfach auf Exchange 2003 bekommt eine Fehlermeldung angezeigt, dass die Seite nicht zur Verfügung steht.

Das ist leider richtig. Damit es aber wieder funktioniert sind folgende Schritte nötig (wohl gemerkt: WIEDER, d.h. ich setze voraus, dass es unter Exchange 2003 schon funktioniert hat!):

    1. Auf dem Exchange 2007 CAS Server muss unter der IIS Konsole bei den  „Web Service Extensions“ die „Active Server Pages“ auf „Allowed“ gesetzt werden.
    2. Wenn das Verzeichnisse C:\Windows\System32\Inetsrv\iisadmpwd schon existiert, dann müssen die Dateien NICHT vom Exchange 2003 OWA Server kopiert werden. Ansonsten natürlich diese Dateien kopieren. 😉
    3. die DLL IISPWCHG.DLL aus dem \SYSTEM32 Verzeichnis registrieren (regsvr32.exe)
    4. Im IIS Manager ein neues Virtuelles Verzeichnis anlegen: IISADMPWD, mit den Einstellungen wie unter Exchange 2003! (Alternativ die Konfiguration vom Exchange 2003 OWA in eine Konfigdatei speichern und im OWA 2007 importieren. Dann den Application Pool auf MSExchangeOWAAppPool setzen. (Vor dem Importieren darauf achten, dass die IUSR_ und IWAM_ in dem Konfig-File korrigiert werden!)
    5. IISRESET ausführen, oder OWA Server 2007 booten

    Danach sollte die Kennwortänderung wieder funktionieren.

    Aber: Wenn es unter 2003 schon nicht ging, dann bitte den vielfältigen Anleitungen im Internet folgen, dann sollte es ohne Probleme möglich sein, dieses Feature zu aktivieren.

    Matthias

    Hier ein Beispielbild

    iismanager.JPG

Exchange 2007 AntiSpam Filter auf Hub Transport Server

Wie schützt man eine Exchangeinstallation vor Spam, wenn man keinen Edge Transport Server installieren will/kann?

Dazu gibt es ein Script im …\Microsoft\Exchange Server\Scripte Ordner Install-AntiSpamAgents.ps1

Damit kann man in der MMC unter Organization Configuration\Hub-Transport\ einen weiteren Reiter aktivieren, der die Anti Spam Features anbietet.:

Exchange AntiSpam

Nach ausführen des Scriptes muss die MMC neu gestartet werden. Dann taucht der AntiSpam Reiter auf.

Exchange AntiSpam Detail Recipient 

Übersicht.

 Exchange AntiSpam Detail Recipient Detail

Hier kann man festlegen, welche Empfänger geblockt werden sollen.

Matthias

 

Addressviews auf Exchange 2007 anpassen (Powershell)

Da ich bei einem Kunden mehr als 300 Adressviews anpassen sollte, habe ich mir dazu ein Powershell Script gebastelt. Damit geht’s schneller und einfacher.

Wer es verwenden möchte, muss seinen LDAP Pfad anpassen. Bitte vorher lesen, was das Script macht, dann ausprobieren!

$Searcher=New-Object System.DirectoryServices.DirectorySearcher
$Searcher.SearchRoot=“
LDAP://CN=All Address Lists,CN=Address Lists Container,CN=[Exchangeorg],CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=[YourDomain],DC=com“
$Searcher.SearchScope=1
$Searcher.Filter=“(&(objectClass=addressBookContainer)(!msExchQueryFilter=*))“
$Searcher.PageSize=1000
$Searcher.SizeLimit=1000

#
#   Suche alle betroffenen
#

$Result = $Searcher.FindAll()

#
# in schleife durchgehen, und alle Adressviews abarbeiten
#
foreach ($member in $Result) {

 #
 # views aus ADS referenzieren/holen
 # 
   $objADR = $Member.GetDirectoryEntry()
 
 #
 # Hilfsvariable
 #
   $Ident   = $objADR.cn

   Set-AddressList „$Ident“ -RecipientFilter „CustomAttribute15 -eq ‚DL-$Ident'“ -ForceUpgrade:$TRUE
   update-AddressList -Identity „$Ident“

}

 

 

 

Matthias

 

Upgrade auf Exchange 2007 ToDos

Adresslisten upgraden auf OPATH Syntax:

Set-AddressList „All Users“ -IncludedRecipients MailboxUsers
Set-AddressList „All Groups“ -IncludedRecipients MailGroups
Set-AddressList „All Contacts“ -IncludedRecipients MailContacts  

Set-GlobalAddressList „Default Global Address List“ -RecipientFilter {(Alias -ne $null -and (ObjectClass -eq ‚user‘ -or ObjectClass -eq ‚contact‘ -or ObjectClass -eq ‚msExchSystemMailbox‘ -or ObjectClass -eq ‚msExchDynamicDistributionList‘ -or ObjectClass -eq ‚group‘ -or ObjectClass -eq ‚publicFolder‘))}  

oder

oder

msExchQueryFilterMetadata: „Microsoft.Exchange12.8f91d340bc0c47e4b4058a479602f94c:RecipientFilterType=1“ (String)
msExchMinAdminVersion: „-2147453113“ (String)
msExchQueryFilter: „CustomAttribute15 -eq ‚[Your value]'“ (String)
purportedSearch: „(extensionAttribute15=[Your value])“ (String)
msExchRecipientFilterFlags: „1“ (String)
msExchLastAppliedRecipientFilter: „CustomAttribute15 -eq ‚[Your value]'“ (String)
msExchVersion: „4535486012416“ (String)

 

E-Mail Recipient Policy upgraden:

Set-EmailAddressPolicy PolicyName -RecipientFilter { ( DisplayName -like „IT*“ ) }

Full Mailbox Access auf Mailboxen setzen: Entweder über die Konsole, rechte Maustaste auf das Postfach, Manage Full Mailbox Access, oder über die Shell:

Add-MailboxPermission -Identity ‚CN=TeamMailbox1,CN=Users,DC=contoso,DC=com‘ -User ‚CONTOSO\donald.duck‘ -AccessRights ‚FullAccess‘ 

Matthias

 

 

Outlook 2007 Autodiscover / Exchange 2007

Für OOF (Abwesenheitsassistent) benötigt Outlook 2007 einen Konfigurationsserver. Der wird anhand der Autodiscovery Funktion ermittelt.

Damit das funktioniert, muss im DNS ein SRV Record hinzugefügt werden:

Service: _autodiscover
Protocol: _tcp
Port Number: 443
Host: ClientAccessServer.YourDomain.com

Der Zugriff erfolgt via https:// und sollte ein geeignetes Zertifikat voraussetzen.

Da der host-name (NetBios-Name) des Servers häufig vom DNS Namen des Servers abweicht (und somit auch das Zertifikat), kann man bei Exchange 2007 mit dem cmdLet Set-ClientAccessServer die AutodiscoverServiceInternalURI angeben. Das ist der CertificatePrincipalName wie im Zertifikat angegeben. (Siehe auch Set-OutlookProvider)

Hier noch ein Link zur MS KB: http://support.microsoft.com/kb/940726/en-us

 

Exchange 2007 und das liebe Schaltjahr…

Hint: System Attendant neu starten, dann kann man auch wieder Mailboxen anlegen.

O.k. dass es Schaltjahre gibt konnte man ja nicht ahnen…. die gib es ja ERST seit ca. 500 Jahren… 🙂

 

Und das ist kein Aprilscherz!

OT:
Julius Caesar is credited with inventing leap year in 45 B.C., with improvements added by Pope Gregory XIII in A.D. 1582. By my count, that means that humans have had more than 2000 years to get used to the idea, and more than 30 years to figure out how to account for leap years in computer code. That raises a reasonable question: Why on earth did Exchange Server 2007 administrators have a leap year problem on February 29 of this year?

Exchange Mailrouting, Distribution List als alternativer Empfänger

Etwas verwirrende Überschrift, aber es geht um folgendes (Herausforderung eines Kunden):

Ausgangssituation: zwei Domänen, A und B. Zwei Exchangestandorte, in jeder Domäne einer. (Exchange A und Exchange B).
Ein Benutzer aus der Subdomäne B sendet eine Mail an einen Empfänger in der Root-Domain A. Mailbox in Domäne A hat einen alternativen Empfänger eingetragen (Mailverteilerliste, Global Group). Die Mails kommen bei den alternativen Empfängern nicht an! Eine Mail aus dem Internet bzw. Mails von Benutzern in der Domäne A kommen an.

Situation: Ein Postfach hat als alternativen Empfänger eine Mailverteilerliste (kein Benutzer, sondern einen Mailverteiler!). Dieser Benutzer ist in Domäne A angesiedelt. Ein Sender aus Domäne B (hier ist auch ein Exchangeserver) mit seinem Postfach auf dem Exchangeserver B sendet eine Mail an Empfänger in Domäne A (mit dem alt. Empfänger).

Damit die Mail auch an die Gruppe der alternativen Empfänger geroutet wird, muss die alternative Empfängergruppe eine Universal Group sein, da der Quell-Exchangeserver (Domäne B) bereits den alternativen Empfänger auflöst. Das kann er bei einer Global Group aber nicht. Deshalb wird der alt. Empfänger auch nicht ausgewertet.

Jedoch: Wenn eine Mail von einem vorgeschalteten SMTP-Relay Server an den Empfänger in Domäne A gesendet wird, erfolgt die Auflösung der alternativen Empfänger vom Exchangeserver A, in dessen Domäne auch die alternative Empfängergruppe ist. Dann gibt/gab es nie Probleme, die alternativen Empfänger auch zu erreichen.

Wenn die alternativen Empfänger nur Benutzerkonten sind, ist das kein Thema!

Ergebnis: Der Mailverteiler muss Universal sein, dann die Replikation zwischen den Domänen/Sites noch abwarten, schon geht’s auch aus der Domäne B.

 

Exchange 2007 User Mailbox zur Resource Mailbox konvertieren / AutoAccept

 

Set-Mailbox „MailboxName“ -Type Room

Und damit Besprechungsräume automatisch Besprechungsanfragen annehmen:

Set-MailboxCalendarSettings „MailboxName“ -AutomateProcessing AutoAccept

 

Eine Liste aller Resource Mailboxen:

Get-Mailbox | where {$_.IsResource -eq „true“}

 

Einige Parameter, die bei CalendarSettings angegeben werden können:

 

AddAdditionalResponse False