Tools: Group2ExInternet

Alle Skripte sind Muster ohne jede Gewährleistung oder Funktionsgarantie. für Schäden bin ich nicht verantwortlich. Achten Sie auf Zeilenumbrüche bei der Übernahme.

Exchange 2007/2010/2013/2016 erlaubt selbst per PowerShell sehr viele Änderungen.
Beachten Sie dazu auch GRP2CAS und die Informationen am Ende dieser Seite.

VBScript und 64Bit !
Viele 32bit COM-Objekte lassen sich auf einem 64bit System nur instanziieren, wenn die 32bit Version von CSCRIPT/WSCRIPT genutzt wird, welcher unter C:\Windows\SysWOW64\cscript.exe liegt.

Version 4.0
Mit der Version 4.0 wird auch Exchange 2003 SP2 berücksichtigt, so dass Sie allein über Gruppenmitgliedschaften steuern können, wer nicht per MAPI oder wer nur per CachedMode arbeiten darf.

Mit der Installation von Exchange 2000/2003 können die Anwender auch weiterhin mit POP3, IMAP4 aber per OWA und OMA auf den Exchange Server zugreifen. Sehr häufig ist aber genau dies nicht gewünscht, dass Anwender per POP3 unverschlüsselt auf ihr Postfach zugreifen.

Die Lösung klingt erst mal einfach: Deaktivieren Sie einfach beim Benutzer die Erlaubnis für POP3. Leider ist dies aber nicht über Gruppenmitgliedschaften, Berechtigungen oder Gruppenrichtlinien zu regeln, sondern eine Einstellung pro Benutzer.

Die Konfiguration steht dabei in den beiden Feldern

  • msExchOmaAdminWirelessEnable
    Steuert ActiveSync
  • ProtocolSettings
    enthält die Einstellungen zu POP3, IMAP, HTTP und MAPI.

Natürlich ist auch ein globales Abschalten auf dem Exchange Server (virtuellen POP3 Server beendet, IP-Restrictions pflegen etc.) möglich. Aber dies ist oft nicht gewünscht,  da bestimmte Dienste z.B.: per POP3 ihre Systemnachrichten abholen.

Was macht GRP2ExInet?

Das Skript "grp2exInet" macht nichts anderes, als alle Exchange Postfächer der aktuellen Domäne sequentiell abzuarbeiten und zu prüfen, ob das jeweilige Benutzerobjekt in den angegebenen Gruppen enthalten ist. Es gibt vier Gruppen, die im Skript als Konstanten hinterlegt sind.

  • conPOP3GRP
    Muss alle Benutzer enthalten,  die per POP3 auf ihr Postfach zugreifen dürfen
  • conIMAP4GRP
    Muss alle Benutzer enthalten,  die per IMAP4 auf ihr Postfach zugreifen dürfen
  • conOWAGRP
    Muss alle Benutzer enthalten,  die per HTTP auf ihr Postfach zugreifen dürfen
  • conOMAGRP
    Muss alle Benutzer enthalten,  die mobil (ActiveSync, OMA) auf ihr Postfach zugreifen dürfen.
  • conNoMapiGRP
    Mitglieder dieser Gruppe haben keinen Zugriff per MAPI auf den Exchange Server.
    ERST AB EXCHANGE 2003 SP2 ausgewertet !
  • vonMapiCacheOnlyGRP
    Mitglieder dieser Gruppe dürfen nur mit dem Cached Mode auf Exchange zugreifen. Achten Sie darauf, dass die Benutzer nicht Mitglied von conNoMapiGRP sind.
    ERST AB EXCHANGE 2003 SP2 ausgewertet !

Wenn der Benutzer in der Gruppe enthalten ist, werden die Eigenschaften auf den einen Wert gesetzt, ansonsten eben auf den anderen Wert.

Gruppe Aktionen für Mitglieder Aktionen für nicht Mitglieder

conPOP3GRP

Benutzer erhält POP3-Berechtigung

Kein Zugriff über POP3 möglich

conIMAP4GRP

Benutzer erhält IMAP4-Berechtigung

Kein Zugriff über IMA4 möglich

conOWAGRP

Benutzer erhält OWA-Berechtigung

Kein Zugriff über OWA möglich

conOMAGRP

Benutzer erhält OMA-Berechtigung

Kein Zugriff über OMA möglich

conNoMapiGRP

Überhaupt kein MAPI-Zugriff. Aber RPC over HTTP möglich

Mapi abhängig von der Gruppe von MapiCacheOnlyGRP möglich

vonMapiCacheOnlyGRP

Cached Mode wird erzwungen !!
wenn nicht Mitglied in conNoMapiGRP

Gewohnter MAPI-Zugriff ohne Einschränkungen
wenn nicht Mitglied in conNoMapiGRP

Damit aus dieser Logik eine Art "Richtlinie" wird, müssen Sie natürlich das Skript regelmäßig starten.

Achtung: Das Script bearbeitet ALLE Exchange Postfächer. Benutzer, die nicht in der Gruppe enthalten sind, wird das Rechte entzogen.

Achtung
Das Skript prüft nur direkt,  ob der Benutzer Mitglied der Gruppe ist. Eine Verschachtelung von Gruppen wird nicht berücksichtigt, d.h. wer z.B. nur in einer Gruppe Mitglied ist, die ihrerseits in der POP3-Gruppe enthalten ist, erhält trotzdem keine POP3-Berechtigungen, sondern bekommt diese entzogen.

Fokus: Eine Domäne
Das Script beschränkt sich auf eine Domäne. Eine Bearbeitung von Benutzern in mehreren Domänen des gleichen Forest ist mit diesem Skript nicht möglich.

Download und Anpassung

Zuerst benötigen Sie das VBScript. Der Download legt eine TXT-Datei an, die Sie nach VBS umbenennen müssen.

grp2exinet.4.0.vbs.txt
Bitte Downloaden und die Erweiterung auf VBS umändern.

In meinen TestUmgebungen und bei Kunden hat dieses Script bislang problemlos funktioniert. Trotzdem kann es sein, dass das Script unerwartet abbricht. Dies liegt oft an Sonderzeichen oder Inhalten im AD, die ich noch nicht abgefangen habe. Bitte setzen Sie dann das Debugging auf 6 und senden Sie mir die letzten Zeilen der Protokolldatei und die Zeilennummer des Fehlers des Scripting Hosts. -> Kontakt

Ehe Sie nun das VBS direkt aufrufen, sollten Sie die Parameter und Voraussetzungen können. Wesentliche Einstellungen sind als Konstanten im Code hinterlegt und entsprechend zu ändern.  Das Skript benötigt den Namen der Gruppe, die anzupassen ist. Nur die Mitglieder dieser Gruppe haben danach noch die Berechtigung, Exchange über die Internet Protokolle zu erreichen. Alle anderen Postfächer können weder POP3, IMAP, OWA, OMA noch ActiveSync nutzen.

  • conDNSDomain
    Diese Konstante enthält die Domäne, gegen die das Skript ausgeführt wird. Hier steht "msxfaq.local" drin. Dies müssen Sie auf ihre Active Directory Domäne anpassen
  • Gruppe muss da sein
    Das Skript legt keine Gruppe an. Die Sicherheitsgruppe bzw. der Verteiler muss bereits bestehen. Auch die Mitgliedschaften haben Sie von Hand oder z.B.: über das Script Querybased Groups pflegen.
  • Berechtigungen
    Der Benutzer, welcher das Skript startet, muss natürlich die Berechtigungen besitzen, die Eigenschaften der Benutzer zu verändern und die Mitgliedschaft der Gruppe zu lesen.
  • Beschränkung auf eine Domäne
    Die Abfrage per LDAP nutzt nur die Default Domäne. Wenn ihr Active Directory aus mehreren Domänen besteht, wäre die Anpassung des Skripts erforderlich, um einen GC oder die verschiedenen DCs zu fragen.
  • Zeitplaner
    Das Skript sollte regelmäßig gestartet werden, da es keine Richtlinie ist. Dazu eignet sich am besten der Microsoft Taskplaner, MOM oder ein anderer Scheduler.
  • Gruppen in Gruppen
    Der Einsatz des Skripts ist nicht auf Exchange beschränkt. Durch die Verwendung einer Sicherheitsgruppe können auch Berechtigungen vergeben werden. Sie können auch öffentliche Ordner, andere Gruppen etc. zum Mitglied der Gruppe machen. Achten Sie dabei aber darauf, dass nicht alle Objekte in den Mitgliedschaften aufgeführt werden können. So kann eine universelle Gruppe nicht Mitglied einer lokalen Gruppe sein (Siehe auch Windows Gruppen). Dies wird nicht abgefangen und führt zu einem Fehler.

Da VBScript aber als Sourcecode vorliegt ist es problemlos möglich, das Skript an eigene Bedürfnisse anzupassen. Dies ist auch erforderlich. Die folgenden Zeilen müssen Sie anpassen:

Const conPOP3GRP = "cn=pop3group,ou=groups,dc=msxfaq,dc=local"
Const conIMAP4GRP = "cn=imap4group,ou=groups,dc=msxfaq,dc=local"
Const conOWAGRP = "cn=owagroup,ou=groups,dc=msxfaq,dc=local"
Const conOMAGRP = "cn=omagroup,ou=groups,dc=msxfaq,dc=local"
Const conNOMAPIGRP = "cn=nomapigroup,ou=groups,dc=msxfaq,dc=local"
Const conMAPICACHEONLYGRP = "cn=mapicacheonlygroup,ou=groups,dc=msxfaq,dc=local"
const conDNSDomain = "dc=msxfaq,dc=local"

Sie müssen hier die Gruppen eintragen, deren Mitglieder für die entsprechenden Protokolle frei geschaltet werden und die Zieldomäne für die Änderungen.

Aufruf und Ausgabe

Damit nicht durch einen versehentlichen Aufruf des Skripts ein Schaden entsteht, gibt es einen Parameter "action", der per Default auf "readonly" steht. Wenn Sie so das Script aufrufen, dann erhalten Sie meist eine Fehlermeldung, dass ein Objekt nicht zu finden ist. Sie haben dann vergessen, die Gruppen in den Konstanten zu definieren.

Wenn Sie dies durchgeführt haben, dann startet GRP2EXINET nur im "ReadOnly" Mode, d.h. das Skript tut alles, außer in das AD zurück zu schreiben. Sie können aber die Ausgabe problemlos anzeigen.

Wenn Sie dies dann wirklich aktivieren wollen, müssen Sie auch die Action aktivieren:

const action = "write"

Erst dann werden die Änderungen auch bei den Benutzern zurück geschrieben.

Sie starten das Script am besten auf einer Kommandozeile mit:

cscript grp2exinet.3.0.vbs

Das Skript schreibt ein Protokoll seit Version 3.0 in eine XML-Datei mit einem passenden XSL-Stylesheet im aktuellen Verzeichnis. Den Pfad können Sie im Skript anpassen. Denkbar ist z.B. auch eine Überwachung mit Programmen wie MOM2005 etc. Die Ausgabe selbst können Sie als XML-Datei mit jedem Editor oder dank des mit generierten Stylesheets z.B. mit dem Internet Explorer anzeigen.

Um vorherige Protokolldateien nicht zu überschreiben, wird an den Dateinamen ein Zeitstempel addiert. Stellen Sie daher sicher, dass Sie die letzte XML-Datei öffnen. Die farbliche Codierung erlaubt ihnen eine einfache Erkennung, welche Parameter bei diesem Durchlauf geändert wurden (gelb). Die grünen Felder zeigen alle unveränderten aktiven Einstellungen und grauen Felder alle unverändert deaktivierten Optionen. Alle Objekte, bei denen das Feld "ProtocolSettings" zurück geschrieben wurden werden rechts dann noch einmal gelb aufgelistet.

Änderungen mit ADMODIFY

Wenn Sie keine Zeit oder Muse haben, diese Berechtigungen mit Gruppen und einem Script zu ändern, dann ist ADModify.NET das Richtige für sie:

Details finden Sie auf Tools ADModify.NET.

Einschränkungen und Hinweise

Das Script hat einige Entwicklungsphasen durchlaufen. Ursprünglich war nur eine Gruppe vorhanden, die global den Zugriff auf die Internet Protokolle POP3, IMAP4, OWA, OMA und ActiveSync gesteuert hat. Das war aber zu unflexibel. Da aber alle Objekte kontrolliert werden müssen und eine LDAP-Abfrage auf das Feld "protocolSettings" aufgrund der Mehrwertigkeit nicht möglich ist, dauert der Durchlauf des Skripts einige Zeit.

Der untere Teil des Skripts mag etwas komisch aussehen, aber ich versuche über diverse Abfragen sicherzustellen, dass das Skript nur dann eine Einstellung zurück schreibt, wenn sich diese auch geändert hat. Das ist bei einem einzeiligen Feld wie "msExchOmaAdminWirelessEnable" noch sehr einfach. Aber das Feld "protocolSettings" ist ein Array und je nach dem, ob das Feld nicht da ist, nur eine Zeile oder mehrere Zeilen enthält müssen verschiedene Abfragen die übliche "Typen sind unverträglich" Fehlermeldung von VBScript abfangen. Zudem kann das Skript zwar das Feld "ProtocolSettings" schreiben, aber bei einem erneuten Lesen kann die Reihenfolge der Inhalte verdreht sein, Daher scheitert ein einfaches "Join" um aus zwei ARRAYS einfach zu vergleichen.

Ich behaupte nicht, dass mein Code perfekt und schön ist, aber bei mir und meinen Kunden funktionieren die Skripte. Sie sind gerne eingeladen, mir Verbesserungen und Hinweise zu senden.

Exchange 2007

Die meisten Funktionen dieses Skripte funktionieren auch mit Exchange 2007. Aber Exchange 2007 kann noch viel mehr und durch die Nutzung der PowerShell werden sogar offizielle APIs genutzt. Hier ein paar Beispiele.

get-mailbox `
   -OrganizationalUnit "dc=msxfaq,dc=de" `
   -RecipientTypeDetails Usermailbox `
| set-casmailbox `
   -OWAEnabled $false `
   -ImapEnabled $false `
   -PopEnabled $false

Die Werte der Protokolle POP3, IMAP4 etc. stehen weiterhin unter "ProtocolSettings". Die Individualeinstellungen, welche Ordner z.B. in OWA erreichbar sind, sind allerdings in einem Feld namens "msExchMailboxFolderSet" geändert, welches als Bitmaske die Funktionen aktiviert oder deaktiviert.

Bit OWA Funktionalität Dezimal Hexadecimal value

0

Messaging

1

1

1

Calendar

2

2

2

Contacts

4

4

3

Tasks

8

8

4

Journal

16

10

5

Sticky notes

32

20

6

Public folders

64

40

7

Reminders

128

80

8

New mail notification

256

100

9

Rich client

512

200

10

Spelling checker

1024

400

11

S/MIME

2048

800

12

Search folders

4096

1000

13

Signature

8192

2000

14

Rules

16384

4000

15

Themes

32768

8000

16

Junk e-mail

65536

10000

17

Exchange 2007 Feature

 

 

18

Exchange 2007 Feature

 

 

XX

All features

4294967295

FFFFFFFF

Aktuell habe ich keine Pläne diese Funktion in das Skript mit zu integrieren, da die PowerShell schon entsprechende Wege anbietet. (Diese Feld gab es bei Exchange 2003 schon im Webserver aber wohl noch nicht bei den Anwendern

Es gibt eine einfache PowerShell-Version zum Steuern von CAS-Funktionen über Gruppenmitgliedschaften auf GRP2CAS

ISA als Reverse Proxy

Wenn Sie einen ISA-Server zwischen das Internet und Exchange geschaltet haben, dann kann auch schon dieser Server die Authentifizierung der Anwender �übernehmen. Der ISA kann dabei sogar auch anhand von Windows Gruppen bestimmen, welcher Personenkreis auf bestimmte URLs zugreifen darf. So können Sie zumindest für OWA ebenfalls eine Steuerung auf Berechtigungsgruppen realisieren, ohne mit GRP2EXINET zu arbeiten.

Weitere Links