PowerShell – Nützliche Exchange Server 2010 Befehle

Da sich die PowerShell Befehle für den Exchange Server großer Beliebtheit erfreuen, habe ich mal ein paar neue Befehle hinzugefügt.

Exchange Server – ActiveSync

Liste aller ActiveSync Geräte

Get-ActiveSyncDevice | ft

ActiveSync-Statistik eines Postfaches

Get-ActiveSyncDeviceStatistics -mailbox "manuel.maliszewski"

Alle ActiveSync Geräte der OU „Ausgeschiedene User“ löschen

Get-ActiveSyncDevice -OrganizationalUnit "Ausgeschiedene User" | Remove-ActiveSyncDevice

Exchange Server – Datenbanken

Übersicht über Datenbanken und deren Größe

Get-MailboxDatabase -Status | ft name, databasesize

Übersicht über Datenbanken mit Informationen zu Retentation und Recoverable Quotas

Get-MailboxDatabase | Select Name, Server, MailboxRetention, Recoverab* |ft

Exchange Server – Postfächer

Übersicht der Postfächer einer Datenbank – Sortiert nach letztem Login mit den Feldern: Benutzername, Größe, Datum der letzten Anmeldung, Letzte Anmeldung

Get-Mailbox -Database "Berlin II - Datenbank II" | Get-MailboxStatistics | Sort LastLogonTime | ft DisplayName, TotalItemSize, LastLogonTime, LastLoggedOnUserAccount

Detailiert Übersicht eines Postfaches mit Unterordnern und dessen Größe

Get-MailboxFolderStatistics -identity "manuel.maliszewski" | ft FolderPath, FolderSize, ItemsInFolder, FolderAndSubfolderSize

Alle Postfächer mit Weiterleitung

Get-Mailbox | Where-Object { $_.ForwardingAddress –ne $null } | Select Name, ForwardingAddress

Alle Postfächer mit „Sende als“ und „volle Postfachberechtigung“

Get-Mailbox | Get-ADPermission | Where-Object { ($_.ExtendedRights -like "*send-as*") -and -not ($_.User -like "nt authority\self") }

Postfächer auf die der Benutzer „chilli“ volle Berechtigungen hat

Get-Mailbox | Get-MailboxPermission | Where-Object { ($_.AccessRights -eq "*fullaccess*") -and ($_.User -like "*chilli*") }

Exchange Server – Warteschlange

Warteschlange anzeigen auf Server S8K011

Get-Queue -Server S8K011

Warteschlangen Queue verschieben

./Move-TransportDatabase.ps1 –QueueDatabasepath “C:\Queue” –QueueDatabaseLoggingPath “D:\Queue”

Exchange Server – System

Alle Exchange-Dienste starten

Test-ServiceHealth | Select ServicesNotRunning | foreach { Start-Service $_.ServicesNotRunning }

Exchange-Dienste Status in Tabelle

Test-ServiceHealth | ft

Testet die Exchange Organisation auf Fehler

Test-SystemHealth

Exchange Server – Verschiedenes

Sprache aller Postfächer auf dem Server S8K011 auf Deutsch setzen

Get-Mailbox -Server S8K011 | Set-Mailbox -language de-DE

Sprache der Postfächer auf Server S8K012 anzeigen, nach Sprache sortieren und als Tabelle mit Namen und Sprache anzeigen

Get-Mailbox -Server S8K012 | sort Languages | ft name, Languages

Liste der Benutzer die den Abwensenheitsassistenten aktiviert haben

Get-Mailbox | Get-MailboxAutoReplyConfiguration | Where-Object { $_.AutoReplyState –eq “scheduled” }

Datenbank – RPC CAS abfragen

Get-MailboxDatabase -Server s8k011 | fl name, rpc\*

Datenbank-Index

Standardmäßig werden alle Datenbanken mit aktiviertem Index angelegt. in diesem Ordner wird der Index erstellt: %datenbankpfad%\CatalogData-Guid. Diesen kann man allerdings aktivieren:

Set-MailboxDatabase MailboxDatabaseName -IndexEnabled:$false

Erste Datenbank löschen

Beim Installieren von Exchange Server 2010 wird automatisch eine Datenbank angelegt. Diese Läst sich nicht über die Gui löschen, auch wenn alle Postfächer verschoben sind. Darum muss man die

System-Postfächer verschieben:

Get-mailbox -Arbitration | New-MoveRequest -TargetDatabase "Berlin I - Postfach I"

Danach muss man noch die Verschiebungsanforderungen löschen und die Datenbank ist entfernbar.

Scripts

Alle Mitglieder einer Gruppe anzeigen und das bis zu 5 Ebenen.

Import-Module ActiveDirectory
$DG = Read-Host

function Get-MySubGroupMembersRecursive
{
	$Mitglieder = Get-ADGroupMember $DG
	ForEach ($Mitglieder in $Mitglieder)
	{
		If ($Mitglieder.ObjectClass -eq "Group")
		{
			Get-MySubGroupMembersRecursive1
		}
		If ($Mitglieder.ObjectClass -eq "User")
		{
			Write-Host ($Mitglieder.Name)
		}
	}
}

function Get-MySubGroupMembersRecursive1
{
	$Mitglieder2 = Get-ADGroupMember $Mitglieder.Name
	ForEach ($Mitglieder2 in $Mitglieder2)
	{
		If ($Mitglieder2.ObjectClass -eq "Group")
		{
			Get-MySubGroupMembersRecursive2
		}
		If ($Mitglieder2.ObjectClass -eq "User")
		{
			Write-Host ($Mitglieder2.Name)
		}
	}
}

function Get-MySubGroupMembersRecursive2
{
	$Mitglieder3 = Get-ADGroupMember $Mitglieder2.Name
	ForEach ($Mitglieder3 in $Mitglieder3)
	{
		If ($Mitglieder3.ObjectClass -eq "Group")
		{
			Get-MySubGroupMembersRecursive3
		}
		If ($Mitglieder3.ObjectClass -eq "User")
		{
			Write-Host ($Mitglieder3.Name)
		}
	}
}

function Get-MySubGroupMembersRecursive3
{
	$Mitglieder4 = Get-ADGroupMember $Mitglieder3.Name
	ForEach ($Mitglieder4 in $Mitglieder4)
	{
		If ($Mitglieder4.ObjectClass -eq "Group")
		{
			Get-MySubGroupMembersRecursive4
		}
		If ($Mitglieder4.ObjectClass -eq "User")
		{
			Write-Host ($Mitglieder4.Name)
		}
	}
}

function Get-MySubGroupMembersRecursive4
{
	$Mitglieder5 = Get-ADGroupMember $Mitglieder4.Name
	ForEach ($Mitglieder5 in $Mitglieder5)
	{
		If ($Mitglieder5.ObjectClass -eq "Group")
		{
			Get-MySubGroupMembersRecursive5
		}
		If ($Mitglieder5.ObjectClass -eq "User")
		{
			Write-Host ($Mitglieder5.Name)
		}
	}
}

function Get-MySubGroupMembersRecursive5
{
	$Mitglieder6 = Get-ADGroupMember $Mitglieder6.Name
	ForEach ($Mitglieder6 in $Mitglieder6)
	{
		If ($Mitglieder6.ObjectClass -eq "User")
		{
			Write-Host ($Mitglieder6.Name)
		}
	}
}

Get-MySubGroupMembersRecursive

Exchange Server 2010 – Admin Audit Log & Mailbox Audit Log

Admin Audit Log

Mit der Administrator Überwachungsprotokollierung können Änderungen von Administratoren bzw. Benutzern an der Exchange Organisation überwacht werden. Es werden alle Cmdlets überwacht, die aus der Verwaltungs-Konsole, Verwaltungs-Shell und Web-Verwaltungsoberfläche aufgerufen werden.

Konfiguration der Administrator Überwachungsprotokollierung

Die Administrator Überwachungsprotokollierung muss einmalig für die Organisation aktiviert werden:

  • Protokollierung aktivieren: Set-AdminAuditLogConfig -AdminAuditLogEnabled $True
  • Protokollierung von Test-Cmdlets deaktivieren: Set-AdminAuditLogConfig -TestCmdletLoggingEnabled $False
  • Dauer der Protokollierung definieren: Set-AdminAuditLogConfig -AdminAuditLogAgeLimit 90.00:00:00

Beispiel

Nach allen Änderungen suchen, die der User „Admin“ getätigt hat.

Search-AdminAuditLog -UserID Admin

Nach allen Änderungen suchen, die der User „Admin“ zwischen dem 1.1.2010 und dem 7.2.2013 getätigt hat und das Ergebnis an admin@test.local per E-Mail senden.

New-AdminAuditLogSearch -UserIds admin -StatusMailRecipients admin@test.local -StartDate 1/1/2010 -EndDate 7/2/2013

Mailbox Audit Log

Mit der Mailbox Überwachungsprotokollierung können Logins und Änderungen an einem Postfach nachvollzogen werden. Standardmäßig ist diese deaktiviert. Die Überwachung muss für jedes Postfach einzeln aktiviert werden.

Mailbox Audit Logging für alle Postfächer aktivieren

Get-Mailbox | Set-Mailbox -AuditEnabled $true

Beispiel

Search-MailboxAuditLog -ShowDetails | ft LogonUserDisplayName, LogonType, LastAccessed, ItemSubject

Exchange Server 2010 – Automapping deaktivieren

Wenn man einem Benutzer volle Berechtigungen auf ein anderes Postfach gewährt, wird dieses Postfach automatisch in Outlook eingebunden. Das kann Vor- und Nachteile haben und da diese Funktion standardmäßig aktiviert ist, sollte man sie auch deaktivieren können.

Add-MailboxPermission -Identity “vorname.nachname” -User Administrator-AccessRights Fullaccess -AutoMapping $false

Wenn man allerdings bereits Fullaccess Rechte verteilt hat, muss man diese aus dem User Object im ADSI-Editor löschen.

  • User Object mit Eigenschaften öffnen
  • Attribut-Editor auswählen
  • Das Attribut msExchDelegateListLink auswählen und den entsprechenden Eintrag löschen

Windows 8 – NetApp CIFS Share Probleme

Unter Windows 8 ist es unter Umständen nicht möglich CIFS Share der NetApp einzubinden.

Microsoft Lösungen

Enable signing on the third-party file server.

Set-SmbClientConfiguration -RequireSecuritySignature $true

Disable „Secure Negotiate“ on the client.

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" RequireSecureNegotiate -Value 0 -Force

NetApp Lösungen

Enable SMB 2 signing on the NetApp(ONTAP CLI)

options cifs.smb2.signing.required on

Enable SMB 2 signing on the NetApp(PowerShell)

ipmo DataONTAP
Connect-NaController controller
Set-NaOption cifs.smb2.signing.required off

Lync 2013 – Standort per Subnetz bestimmen

Der Lync Server 2013 kann den Standort eines Benutzers per Subnetz finden. Wenn eine Firma beispielsweise mehrere Standorte betreibt und diese in unterschiedliche Subnetze aufgeteilt sind, kann somit der Standort des Benutzers ermittelt werden. Grade bei viel reisenden Mitarbeitern kann dies praktisch sein.

Konfiguration

Für jedes Netz und dessen Standort, das dem Lync Server bekannt gemacht werden sol, muss ein Powershell Befehl abgesetzt werden.

Subnetz 192.168.1.0 den Standort Klosterstraße 71 in Berlin zuordnen

Set-CsLisSubnet –Subnet 192.168.1.0 –Location “Klosterstraße 71” –City “Berlin”

Konfiguration bekanntgeben

Nachdem die Netzte hinzugefügt wurden, muss die Konfiguration des Lync Servers aktualisiert werden.

Publish-CsLisConfiguration

Ergebnis

Lync Standort

Outlook 2010 – Parameter

In Outlook 2010 stehen einige Startoptionen zur Verfügung. Diese können folgendermaßen ausgeführt werden:

Start -> Ausführen -> Outlook.exe /Parameter

/CleanAutoCompleteCache – Entfernt alle Namen und E-Mail-Adressen aus der Liste Cache (AutoVervollständigen)
/cleanclientrules – Es werden alle Regeln entfernt, welche mit Outlook erstellt worden sind. (z.B. E-Mails mit einem bestimmten Betreff automatisch in einen Ordner zu verschieben)
/cleanfreebusy – Für diese Option benötigt der Client eine Verbindung mit dem Exchange Server, damit die Frei – / Gebuchten Zeiten neu generiert werden können.
/cleanreminders – Die Errinerungen werden neu generiert.
/cleanrules – Es werden alle Regeln (Client und Serverbasiert( gelöscht.
/cleanserverrules – Es werden alle Regeln entfernt, die Serverseitig erstellt worden sind.
/cleanviews – Alle benutzerdefinierten Ansichten werden im Outlook zurückgesetzt
/firstrun – Outlook wird so gestartet, als wenn Sie das Programm das erste mal aufrufen.
/resetfoldernames – Alle Standardordner (Posteingang, Postausgang, usw.) werden auf die auf die Sprache der Benutzeroberfläche zurückgesetzt -> z.B. Inbox – Posteingang
/resetsharedfolders – Alle freigegebenen Ordner werden entfernt
/rpcdiag – das Dialogfeld für den Verbindungsstatus des Remoteprozeduraufrufs wird angezeigt.

Internet Explorer EMET – Sicherheitslücke mit EMET schließen und per Gruppenrichtlinie konfigurieren

Auf heise.de wird vor einer Sicherheitslücke im Internet Explorer gewarnt. (Link) Microsoft empfiehlt bis dahin eine Lösung per Enhanced Mitigation Experience Toolkit v3.0 (EMET). Das Tool kann per MSI ausgerollt und per Gruppenrichtlinie konfiguriert werden. Damit können die in Windows 7 integrierten Schutz-Mechanismen für Prozesse konfiguriert werden. internet explorer emet

In der Registry aktivieren

Mit diesem Registry Eintrag kann man den Schutz für den Internet Explorer aktivieren. Das könnte man auch per GP ausrollen.

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\EMET\Defaults]
"*\\Internet Explorer\\iexplore.exe"=""

Autorun des EMET Notify Utility deaktivieren

Beim Ausrollen wird das EMET Notify Utility in den Autostart installiert. Wenn man folgenden Pfad löscht, kann man das deaktivieren.

HKEY_LOCAL_MACHINE\Software\WOW6432node\Microsoft\Windows\CurrentVersion\Run\EMET Notifier

Download EMET (Enhanced Mitigation Experience Toolkit v3.0)
Group Policy Files

Blackberry Enterprise Server – Lync Server – Collaboration Probleme

Nach Maintanance Release 5 Für das aktuelle Service Pack der BES treten bei der Kopplung von Lync folgende Fehler auf:

<2012-09-07 14:21:44.513 MESZ>:[114]:<BBIM_S8KV004_BBIM_1>:<ERROR>:<LAYER = BBIM, [OCSC] BlackBerry OCSConnector will terminate...>
<2012-09-07 14:21:44.513 MESZ>:[112]:<BBIM_S8KV004_BBIM_1>:<ERROR>:<LAYER = BBIM, [OCSC] Error: No certificates were found matching the required criteria>
<2012-09-07 14:21:44.513 MESZ>:[111]:<BBIM_S8KV004_BBIM_1>:<ERROR>:<LAYER = BBIM, [OCSC] No certificates were found matching the required criteria>

Damit wird die Verbindung von BES und Lync 2010 komplett deaktiviert, da der Dienst beendet wird. Das kommt daher, dass die Verifizierung des Zertifikates geändert wurde. Das Zertifikat wird mit einem Microsoft Kommandozeilen Programm analysiert, welche die Informationen zu dem Zertifikat zurückliefert. Dieser Informationen sind aber nach der eingestellen Sprache variabel und damit nicht mehr stimmig.

Changelog mit MR5

As of BlackBerry Enterprise Server 5.0 SP3 MR5, there is a change in how the BlackBerry Collaboration Service retrieves the local certificate. It is no longer required to set the Friendly Name field to OCSConnector.
If the BlackBerry Collaboration Service has been installed for use with Microsoft Office Communications Server 2007 R2, the certificate check looks like this:
Retrieve all local certificates that have the:

  • Enhanced Key Usage attribute set to Server Authentication
  • Subject Name matches the Fully Qualified Domain Name of the local server

Lösung

Einfach das englische Language Pack (MUI) runterladen und installieren und die Systemsprache auf Englisch ändern. Danach funktioniert der Collaboration Dienst wieder wie gewohnt.

Das MUI kann direkt bei Microsoft runtergeladen werden: http://www.microsoft.com/en-us/download/details.aspx?id=1246

Exchange Server 2013 – Getrennte Postfächer anzeigen & löschen

Die getrennten Postfächer werden nur einmal täglich, je nach Konfiguration meistens in der Nacht, aktualisiert. Wenn man also ausversehen einen Benutzer gelöscht hat, muss man dadurch unter Umstäden einen Tag warten. Um dies zu beschleunigen um das Postfach schnell wieder verbinden zu können oder das Postfach zu löschen, kann die Powershell benutzt werden.

Möglicher Status

Gelöschte Postfächer können verschiedenen Status haben.

Disbabled

Wenn ein Postfach den Status Disabled hat, wurde der User oder auch nur das Postfach gelöscht.

SoftDeleted

Wenn ein Postfach in eine andere Datenbank verschoeben wurde, bleibt es in der alten Datenbank mit dem Status SoftDeleted erhalten. Die Dauer ist konfiguriertbar.

Getrennte Postfächer aktualisieren

Hiermit werden Postfächer die grade gelöscht wurden, für alle Datenbanken sofort als getrennt angezeigt:

Get-MailboxDatabase | Clean-MailboxDatabase

Nun kann man diese in der Exchange Verwaltungskonsole anzeigen lassen und ggf. schnell wiederverbinden.

Getrennte Postfächer löschen

Wenn man die Postfächer sofort löschen und die Aufbewahrungszeit außerkraft zu setzen will, kann dies folgendermaßen geschehen. Erst müssen die gelöschten Postfächer ausgelesen werden, um die Identity zu bekommen. Diese kann dann genutzt werden, um das Postfach zu löschen:

Get-MailboxDatabase | Get-MailboxStatistics | Where{ $_.DisconnectDate -ne $null } | fl DisplayName, Database, Identity, DisconnectReason

Disabled Postfächer löschen

Diese Identity kann nun verwendet werden, um das Postfach mit dem Status „Disabled“ in der Datenbank „Datenbank“ zu löschen:

Remove-StoreMailbox -Database “Datenbank” -Identity “3242341-3d35-34f8-4324-asdkasdj34jfs” -MailboxState “Disabled”

SoftDeleted Postfächer löschen

Diese Identity kann nun verwendet werden, um das Postfach mit dem Status „SoftDeleted“ in der Datenbank „Datenbank“ zu löschen:

Remove-StoreMailbox -Database “Datenbank” -Identity “3242341-3d35-34f8-4324-asdkasdj34jfs” -MailboxState “Softdeleted”

Exchange Server 2010 – IMAP, POP3 und SMTP Einstellungen im Outlook WebApp anzeigen

In Exchange Server 2010 ist es möglich, die Verbindungseinstellungen zu IMAP,POP3 und SMTP, im Outlook WebApp für die Benutzer zu veröffentlichen. Dazu muss die Powershell benutzt werden.

POP3 Einstellungen

Set-POPSettings -ExternalConnectionSettings "pop.domain.de:ssl"

IMAP Einstellungen

Set-IMAPSettings -ExternalConnectionSettings "imap.domain.de:993:ssl"

SMTP Einstellungen

ReceiveConnector -Identity "ServerName\Client ServerName" -AdvertiseClientSettings:$true

Beispiel

webmail