Artikel-ID: 930879 - Geändert am: Dienstag, 15. Januar 2008 - Version: 22.2 Verwendung des Exchange-Kalender Update-Tools Adresse Sommerzeit-Änderungen für Exchange Server
wichtig In diesem Microsoft Knowledge Base-Artikel beschriebenen Updates wurde durch das Update ersetzt, das im Microsoft Knowledge Base-Artikel 941018 beschrieben wird. Sicherstellen hat, dass Windows die neuesten Zeitzonen-Daten, installieren die Update, beschrieben ist, im Microsoft Knowledge Base-Artikel 941018. Sie müssen das Update deinstallieren, das im dieser Microsoft Knowledge Base beschrieben wird, bevor Sie im Microsoft Knowledge Base-Artikel 941018 beschriebene Update installieren. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base: 941018
(http://support.microsoft.com/kb/941018/
)
Wie Sie Sommerzeit mithilfe des Tools Exchange Kalender aktualisieren Auf dieser SeiteEINFÜHRUNGSommerzeit ist ein System von Einstellung Uhren im voraus, damit Sonnenaufgang und Sonnenuntergang an eine Stunde später auftreten. Der Effekt ist zusätzliche Sommerzeit am Abend. Viele Länder beobachten Sommerzeit, obwohl die meisten haben eigene Regeln und Vorschriften für wann es beginnt und endet. Die Daten der Sommerzeit (andernfalls als DST bezeichnet) können Jahr zu Jahr ändern, und Benutzer müssen Ihre Microsoft Outlook-Kalender jedes Mal aktualisieren, dass der DST Gesetz oder Regeln ändern. Die Daten zwischen der vorherigen DST-Regeln und die aktuellen DST-Regeln werden in diesem Artikel als die "DST längere." bezeichnet Dieser Artikel konzentriert sich auf Aktionen, die Sie Kalenderelemente in Microsoft Outlook Adresse ergreifen können, die während der Sommerzeit längere auftreten. Weitere Informationen zum Änderungen der Sommerzeit 2007 (Sommerzeit 2007) für alle betroffenen Microsoft-Produkte Vorbereiten der folgenden Microsoft-Website: http://www.microsoft.com/DST2007
(http://www.microsoft.com/DST2007)
Dieser Artikel befasst sich die ausgeführten Aktionen werden sollten, aktualisieren Kalendereinträge, die nach den neuen DST-Regeln in Microsoft Exchange Server gespeichert sind. Die Lösung, die in diesem Artikel vorgestellt werden umfasst das Exchange Kalender-Updateprogramm (? der Exchange-Tool eingeben). Das Tool Exchange beruht auf das Aktualisierungstool Zeitzone Daten für Microsoft Office Outlook (? der Outlook Tool eingeben). Weitere Informationen zu den Outlook-Tool finden Sie im folgenden Artikel der Microsoft Knowledge Base: 931667
(http://support.microsoft.com/kb/931667/
)
Wie Sie die Sommerzeitänderungen in 2007 mithilfe des Zeitzone Data Update-Tools für Microsoft Office Outlook Über das Exchange-toolNach der Installation der DST-Updates für Microsoft Windows werden alle alten Termine, die während der DST ändern Perioden falsch angezeigt als eine Stunde später auftritt. Dies gilt für wiederkehrende und Einzelinstanz-Termine. Diese Termine müssen aktualisiert werden, so dass Sie korrekt in Outlook, Outlook Web Access und CDO-basierte Anwendungen angezeigt werden.Outlook stellt ein Tool mit dem Namen das Aktualisierungstool Zeitzone Daten für Microsoft Office Outlook. Dieses Tool ermöglicht Benutzern das eigene Kalender aktualisieren. Hinweis: Das Updateprogramm Zeitzone Daten ist in Microsoft Office Outlook 2007 integriert. Wir empfehlen jedoch, die eigenständige Version des Tools Zeitzone Daten aktualisieren verwenden. 931667
(http://support.microsoft.com/kb/931667/
)
Wie Sie die Sommerzeitänderungen in 2007 mithilfe des Zeitzone Data Update-Tools für Microsoft Office Outlook Das Exchange Kalender-Updateprogramm ("der Exchange-Tool") können Sie die Herausforderungen zu vermeiden, die beteiligt sind, wenn Sie das Outlook-Tool weit für alle Benutzer bereitstellen und ermöglicht Ihnen sicherzustellen, dass jeder Benutzer das Programm korrekt ausgeführt wird.Allgemeine Beschreibung der Exchange-toolDas Exchange-Tool besteht aus zwei separate ausführbare Dateien. Diese Dateien werden in der folgenden Tabelle beschrieben.Tabelle minimieren
Version 2 des Exchange-toolVersion 2 von Exchange Kalender Update-Tool wurde auf 21 Februar 2007 veröffentlicht. Dieser Artikel bezieht sich auf 2-Version des Exchange-Tools. Wenn Sie Version 1 von Exchange-Tool ausführen, deinstallieren Sie und installieren Sie Version 2. Der Exchange-Tool, Version 2 enthält die folgenden Verbesserungen:
Risiken und Einschränkungen für die Ausführung des Exchange-ToolsEs gibt zwei Probleme vor dem Ausführen des Exchange-Tools zu berücksichtigen. Die folgende Tabelle listet diese Probleme, deren möglichen Auswirkungen auf die IT-Infrastruktur und auf Benutzer und Ihre Problembehebungsstrategien.Tabelle minimieren
Optionen für Postfächer aktualisierenDie folgenden Tabelle sind fünf Optionen, die Postfächer der Benutzer zum Verwenden der Sommerzeit 2007 Zeitzonenregeln aktualisieren verwendet werden können, aufgeführt.Tabelle minimieren
Zum Installieren von Exchange-toolExchange Kalender Update Tool ist in Form eines selbstextrahierenden ausführbaren Datei Msextmz.exe verfügbar.Nach der Installation sollten die Dateien in das Installationsverzeichnis die folgenden Dateien einschließen:
941018
(http://support.microsoft.com/kb/941018/
)
Wie Sie Sommerzeit mithilfe des Tools Exchange Kalender aktualisieren Sprachen, die vom Exchange-Tool unterstützt werdenDas Exchange-Tool ist nur auf Englisch verfügbar. Das Tool wird nur auf einem Computer Englisch (USA) ausgeführt.Versionen von Exchange Server, die mit dem Tool Exchange kompatibel sindDas Tool Exchange kann Postfächer auf den folgenden Versionen von Exchange Server aktualisieren:
Betriebssysteme, die von der Exchange-Tool unterstützt werdenDas Exchange-Tool wird auf den folgenden Betriebssystemen ausführen:
Vorgehensweise, bevor Sie Exchange-Tool ausführenInstallieren von updatesStellen Sie sicher, dass die Client- und Servercomputern korrekt mit den folgenden Updates aktualisiert werden, bevor Sie Exchange-Tool ausführen:
Überprüfen der SystemanforderungenExchange-Tool muss auf einem Computer mit Microsoft Office Outlook 2003 ausgeführt werden oder Microsoft Office Outlook 2007 installiert und hat die Outlook Zeitzone Datentool installiert. Darüber hinaus Microsoft .NET Framework, Version 2.0 muss auf dem Clientcomputer installiert werden.Outlook und das Zone Data Update-Tool für Microsoft Office Outlook sind nicht Teil des Pakets Exchange Tool downloaden. Sie müssen separat installiert werden. Hinweis: Verwechseln Sie nicht das Outlook-Tool Installationspaket Tzmove.exe mit der tatsächlichen ausführbaren Datei für Outlook-Tool ist auch Tzmove.exe mit dem Namen ist. Zum erfolgreichen Ausführen das Exchange-Tool muss der Computer nicht die PickLogonProfile Registrierung-Wert festgelegt. Alternativ muss diesen Registrierungswert auf 0 festgelegt werden. Gehen Sie folgendermaßen vor um festzustellen, ob dieser Registrierungswert vorhanden ist. wichtig In diesem Abschnitt, Methode oder Aufgabe enthält Hinweise zum Ändern der Registrierung. Allerdings können schwerwiegende Probleme auftreten, wenn Sie die Registrierung falsch ändern. Stellen Sie daher sicher, dass Sie diese Schritte sorgfältig ausführen. Für zusätzlichen Schutz sichern Sie der Registrierung, bevor Sie ihn ändern. Anschließend können Sie die Registrierung wiederherstellen, wenn ein Problem auftritt. Weitere Informationen zum Sichern und Wiederherstellen der Registrierung finden Sie im folgenden Artikel der Microsoft Knowledge Base: 322756
(http://support.microsoft.com/kb/322756/
)
Zum Sichern und Wiederherstellen der Registrierung in Windows
Microsoft Exchange Kalender-Updateprogramm kann nicht mit Microsoft Exchange installiert werden. Wie Sie manuell konfigurieren und Ausführen von Msextmz.exeKonfigurieren Sie die Msextmz.ini-DateiDie Msextmz.ini-Datei muss korrekt für Msextmz.exe für die ordnungsgemäße Ausführung konfiguriert werden. Es wird empfohlen, dass die Kommentare in der Msextmz.ini lesen Datei sorgfältig, bevor Sie die Datei Msextmz.ini ändern.Geben Sie den Ausführungsmodus Msextmz.exeMsextmz.exe kann in zwei Modi ausgeführt werden. Den Modus der Ausführung angeben möchten, müssen bestimmte Parameter in der Datei Msextmz.ini festgelegt werden. Die folgende Liste beschreibt drei Modi und beschreibt die Modi in der Datei Msextmz.ini konfigurieren.
Konfigurieren von Berechtigungen für Msextmz.exeBerechtigungen, die zum Ausführen von Msextmz.exe erforderlich sind hängen von der Ausführungsmodus, der verwendet wird. In der folgende Tabelle sind Berechtigungen, die für jede Ausführungsmodus erforderlich sind aufgeführt.Tabelle minimieren
"Zugriff gewähren Mailbox"-SkriptDas Beispielskript GrantMailboxPermission.vbs können Sie Benutzerrechte Vollständiger Postfachzugriff "und" Senden als auf alle Postfächer zu einer Domäne gewähren.Dieses Skript kann nur von Exchange-Administrator auf einem Computer ausgeführt werden, auf dem Exchange 2000 Server oder Exchange Server 2003 ausgeführt wird. Dieses Skript kann nicht auf einem Computer ausgeführt werden, auf dem Exchange Server 2007 ausgeführt wird. Jedoch können der Exchange-Verwaltungsshell Sie um erforderlichen Berechtigungen zu gewähren. Der Code für das VBS-Skript ist im Abschnitt "Informationsquellen" bereitgestellt. Die folgende Tabelle beschreibt die beiden Modi in denen dieses Skript ausgeführt wird. Tabelle minimieren
Hinweis: Die Ausgabedatei der Zeitzone Extrahierung Modus kann nicht als Eingabedatei für dieses Skript verwendet werden. Um die Eingabedatei für dieses Skript zu erstellen, können Sie einfügen des Inhalts der Ausgabedatei Zeitzone extrahieren in Editor, den Inhalt als neues Dokument speichern und verwenden dann das neue Dokument als die Eingabedatei. Funktionsweise der Protokollierung im AktualisierungsmodusProtokolle aus dem Outlook Zeitzone Data Update-toolWenn das Outlook-Tool ausgeführt wird, erstellt das Tool eine Protokolldatei im temporären Verzeichnis. Diese Datei heißt ""Update.log Outlook Zeitzone "." Msextmz.exe extrahiert die Informationen von "Outlook-Zeitzone"Update.log"" und wird dann pro Benutzer Protokolldateien im Verzeichnis erstellt, das in der LogDirectory der INI-Datei angegeben ist.Diese Dateien werden mit das folgende Format benannt: MSExTmz-User?s CN from the User DN-Random number .log Das Outlook-Tool protokolliert z. B. die folgende Informationen: MSExTmz-Benutzer3-0x0131273E.LOG Das Outlook-Tool führt dies, wenn er einen Benutzer verarbeitet, der den folgenden DN hat: / O = ERSTE ORGANISATION/OU = ERSTE ADMINISTRATIVE GRUPPE/CN = RECIPIENTS/CN = BENUTZER3 FehlerdateiWenn Msextmz.exe nicht das Outlook-Tool für jedes Postfach ausgeführt werden kann, wird der DN des Benutzers in der Fehlerdatei protokolliert. Msextmz.exe protokolliert nicht alles in die Fehlerdatei wurde das Outlook-Tool erfolgreich ausgeführt.ProtokolldateiWenn die Option Protokolldatei in der Datei Msextmz.ini konfiguriert ist, ist die Ausgabe von Msextmz.exe an der Eingabeaufforderung Befehlsfenster Informationen in der angegebenen Datei auch verfügbar.Zum Ausführen von Msextmzcfg.exeMsextmzcfg.exe automatisiert das Extrahieren von Zeitzonen, zum Auflösen von Zeitzonen für jeden Benutzer und generieren den Benutzerlisten und INI-Dateien, die zum Ausführen von Msextmzcfg.exe im Aktualisierungsmodus erforderlich sind. Es wird empfohlen, dass Msextmzcfg.exe zu, zum Durchführen dieser Schritte verwenden anstatt Sie manuell durchführen. Dieser Abschnitt beschreibt, wie Msextmzcfg.exe ausgeführt wird.Berechtigungen, die erforderlich sindDas Konto, das zum Ausführen von Msextmzcfg.exe verwendet wird, muss folgenden Berechtigungen auf dem Client verfügen:
Beispiel für den Prozess, einen Exchange-Server mithilfe von Msextmzcfg.exe aktualisieren
Vorgehensweise, nach dem Ausführen des Exchange-ToolsInstallieren von updatesNachdem Sie alle Exchange-Server in Ihrer Umgebung aktualisieren, installieren Sie das folgende Update auf Exchange-Server:926666
(http://support.microsoft.com/kb/926666/
)
Update für Sommerzeitänderungen in 2007 für Exchange 2003 Service Pack 2 Bekannte Probleme
Fehlermeldungen und Lösungen
Informationsquellen"Zugriff gewähren Mailbox"-SkriptOption Explicit
' For FileSystemObject
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Const TristateTrue = -1
Const TristateUseDefault = -2
Const TristateFalse = 0
'Permission Type: Allow or Deny
Const ADS_ACETYPE_ACCESS_ALLOWED = &H0
Const ADS_ACETYPE_ACCESS_DENIED = &H1
Const ADS_ACETYPE_ACCESS_ALLOWED_OBJECT = &H5
Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6
Const ADS_ACEFLAG_INHERIT_ACE = &H2
Const ADS_ACEFLAG_NO_PROPAGATE_INHERIT_ACE = &H4
Const ADS_ACEFLAG_INHERIT_ONLY_ACE = &H8
Const ADS_ACEFLAG_INHERITED_ACE = &H10
Const ADS_ACEFLAG_VALID_INHERIT_FLAGS = &H1f
Const ADS_ACEFLAG_SUCCESSFUL_ACCESS = &H40
Const ADS_ACEFLAG_FAILED_ACCESS = &H80
'Declare ADSI constants
Const ADS_SCOPE_SUBTREE = 2
Const ADS_OPTION_SECURITY_MASK = 3
Const ADS_OPTION_REFERRALS = 1
Const ADS_SECURITY_INFO_DACL = 4
Const ADS_CHASE_REFERRALS_NEVER = &h00
Const ADS_CHASE_REFERRALS_SUBORDINATE = &h20
Const ADS_CHASE_REFERRALS_EXTERNAL = &h40
'Microsoft Exchange
Const EX_MB_SEND_AS_ACCESSMASK = &H00100
Const EX_FULLMAILBOX_ACCESSMASK = 1
Const EX_MB_SEND_AS_GUID = "{AB721A54-1E2F-11D0-9819-00AA0040529B}"
'Application Parameter Index
Const ARG_INDEX_MODE = 0
Const ARG_INDEX_USERNAME = 1
Const ARG_INDEX_FILENAME = 2
Const MIN_ARG = 1
Const MODE_INVALID = -1
Const MODE_ADD = 0
Const MODE_REMOVE = 1
Const ADD = "-ADD"
Const REMOVE = "-REMOVE"
'Application Const String
Const EMPTYSTRING = ""
Const ERROR_FILENAME = "GrantMailboxPermission.err"
Const OUTPUT_FILENAME = "GrantMailboxPermission.log"
Dim OUTPUT_DELIMITER
OUTPUT_DELIMITER = vbTab
'Logging file
Dim objFSO
Dim objfileError
Dim objfileOutput
Dim objfileImport
Dim objconn
Dim objCommand
Dim rootDSE
Dim sDomainContainer
Dim sUserLDAPPath
Dim objUser
Dim objSDNTsecurity
Dim objDACLNT
Dim objDACLEX
Dim objSDMailbox
Dim fFMA
Dim fSendAs
Dim AccessTypeForFMA
Dim AccessTypeForSendAS
Dim fAddedFMA
Dim fAddedSendAs
Dim fRemovedFMA
Dim fRemovedSendAs
Dim sArraySplit
Dim sOneRow
Dim sGrantedUser
Dim dArgCount
Dim cScriptMode
Dim dArgExpected
Dim fOneError
On Error Resume Next
'Parameter Checking
dArgCount = Wscript.Arguments.Count
If (dArgCount < MIN_ARG) Then
DisplaySyntax
End If
cScriptMode = MODE_INVALID
Select Case UCase(WScript.Arguments(ARG_INDEX_MODE))
Case ADD
cScriptMode = MODE_ADD
dArgExpected = ARG_INDEX_FILENAME + 1
Case REMOVE
cScriptMode = MODE_REMOVE
dArgExpected = ARG_INDEX_MODE + 1
Case Else
cScriptMode = MODE_INVALID
End Select
If (cScriptMode = MODE_INVALID Or dArgCount <> dArgExpected) Then
DisplaySyntax
End If
If (cScriptMode = MODE_ADD) Then
sGrantedUser = WScript.Arguments(ARG_INDEX_USERNAME)
If (IsValidUserName(sGrantedUser) = False) Then
DisplaySyntax
End If
End If
CreateImportExportFiles
If (cScriptMode = MODE_ADD) Then
err.Clear
'Prepare LDAP connection
Set objconn = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objconn.Provider = "ADSDSOObject"
objconn.Open "ADs Provider"
If (err.number <> 0) Then
WScript.StdOut.WriteLine("Failed to bind to Active Directory server, error:" & err.Description)
objfileError.WriteLine("Failed to bind to Active Directory server, error:" & err.Description)
WScript.Quit
End If
Set rootDSE = GetObject("LDAP://rootDSE")
sDomainContainer = rootDSE.Get("defaultNamingContext")
If (err.number <> 0) Then
WScript.StdOut.WriteLine("Failed to find a Domain Container:" & err.Description)
objfileError.WriteLine("Failed to find a Domain Container:" & err.Description)
WScript.Quit
End If
Set objCommand.ActiveConnection = objconn
Do While objfileImport.AtEndOfStream <> True
fOneError = False
sUserLDAPPath = EMPTYSTRING
err.Clear
sOneRow = Trim(objfileImport.ReadLine)
If sOneRow <> EMPTYSTRING Then
sUserLDAPPath = GetLDAPPathFromLegacyDN(sOneRow)
If (err.number <> 0) Then
objfileError.WriteLine("Failed to get user's LDAP path from " & sOneRow)
fOneError = True
err.Clear
End If
If (fOneError = False) Then
Set objUser = GetObject(sUserLDAPPath)
If (err.number <> 0) Then
objfileError.WriteLine("Failed to get user object from " & sUserLDAPPath)
objfileError.WriteLine("Error: " & err.Description)
fOneError = True
err.Clear
End If
End If
If (fOneError = False) Then
Set objSDMailBox = objUser.MailboxRights
Set objDACLEX = objSDMailbox.DiscretionaryAcl
Set objSDNTsecurity = objUser.ntSecurityDescriptor
Set objDACLNT = objSDNTsecurity.DiscretionaryAcl
If (err.number <> 0) Then
objfileError.WriteLine("Failed to get DACL of " & sUserLDAPPath)
objfileError.WriteLine("Error: " & err.Description)
fOneError = True
err.Clear
End If
End If
' Check Full Mailbox Access and Send As permission
fFMA = False
fSendAs = False
AccessTypeForFMA = ADS_ACETYPE_ACCESS_ALLOWED
AccessTypeForSendAS = ADS_ACETYPE_ACCESS_ALLOWED
If (fOneError = False) Then
CheckFullMailboxAccess objDACLEX, sGrantedUser, fFMA, AccessTypeForFMA
CheckSendAs objDACLNT, sGrantedUser, fSendAs, AccessTypeForSendAS
If (err.number <> 0) Then
objfileError.WriteLine("Failed to Check permission of " & sUserLDAPPath)
objfileError.WriteLine("Error: " & err.Description)
fOneError = True
err.Clear
End If
End If
'If we don't have either SendAS or FMA, we're going to add these permission
If ( (AccessTypeForFMA = ADS_ACETYPE_ACCESS_DENIED) Or (AccessTypeForSendAs = ADS_ACETYPE_ACCESS_DENIED_OBJECT) ) Then
'Deny access already granted, won't add permission to this user
objfileError.WriteLine("Deny permission already added: " & sUserLDAPPath)
fOneError = True
End If
If ( fOneError = False And ((fFMA = False) Or (fSendAs = False)) ) Then
fAddedFMA = False
fAddedSendAs = False
If (fFMA = False) Then
'Add FMA permission
err.Clear
AddAce objDACLEX, sGrantedUser, EX_FULLMAILBOX_ACCESSMASK, ADS_ACETYPE_ACCESS_ALLOWED, ADS_ACEFLAG_INHERIT_ACE, 0,0,0
objSDMailbox.DiscretionaryAcl = objDACLEX
objUser.MailboxRights = Array(objSDMailbox)
If ( err.number <> 0 ) Then
objfileError.WriteLine("Failed to add FullMailbox Access: " & sUserLDAPPath)
objfileError.WriteLine("Error: " & err.Description)
fOneError = True
fAddedFMA = False
err.Clear
Else
fAddedFMA = True
End If
End If
If (fSendAs = False) Then
'Add SendAs permission
err.Clear
AddAce objDACLNT, sGrantedUser, EX_MB_SEND_AS_ACCESSMASK, ADS_ACETYPE_ACCESS_ALLOWED_OBJECT, 0,1, EX_MB_SEND_AS_GUID, 0
objSDNTsecurity.DiscretionaryAcl = objDACLNT
objUser.Put "ntSecurityDescriptor", Array( objSDNTsecurity )
objUser.SetOption ADS_OPTION_SECURITY_MASK, ADS_SECURITY_INFO_DACL
If ( err.number <> 0 ) Then
objfileError.WriteLine("Failed to add SendAs permission: " & sUserLDAPPath)
objfileError.WriteLine("Error: " & err.Description)
fOneError = True
fAddedSendAs = False
err.Clear
Else
fAddedSendAs = True
End If
End If
If (fOneError = False ) Then
objUser.SetInfo
If (err.number <> 0) Then
objfileError.WriteLine("Failed to update user: " & sUserLDAPPath)
objfileError.WriteLine("Error: " & err.Description)
fOneError = True
err.Clear
Else
'Update Logging
objfileOutput.WriteLine(sUserLDAPPath & OUTPUT_DELIMITER & fAddedFMA & OUTPUT_DELIMITER & fAddedSendAs)
End If
End If
End If
Set objUser = Nothing
Set objSDNTsecurity = Nothing
Set objDACLNT = Nothing
Set objDACLEX = Nothing
Set objSDMailBox = Nothing
If (fOneError = True) Then
WScript.StdOut.Write("!")
Else
WScript.StdOut.Write(".")
End If
End If
Loop
Set rootDSE = Nothing
Set objCommand = Nothing
Set objconn = Nothing
End If
If (cScriptMode = MODE_REMOVE) Then
'Retreive the granted user from the first line of import file
sGrantedUser = objfileImport.ReadLine
If (IsValidUserName(sGrantedUser) = False) Then
WScript.StdOut.WriteLine("Invalid User in import file. please check import file..")
objfileError.WriteLine("Invalid User in import file. please check import file..")
WScript.Quit
End If
Do While objfileImport.AtEndOfStream <> True
fOneError = False
sUserLDAPPath = EMPTYSTRING
fAddedFMA = False
fAddedSendAs = False
fRemovedFMA = False
fRemovedSendAs = False
err.Clear
sOneRow = objfileImport.ReadLine
sArraySplit = Split(sOneRow, OUTPUT_DELIMITER)
'First column is Ldap path
sUserLDAPPath = sArraySplit(0)
'Second column is FullMailbox Permission
fAddedFMA = sArraySplit(1)
'Third column is SendAs
fAddedSendAs = sArraySplit(2)
Set objUser = GetObject(sUserLDAPPath)
If (err.number <> 0) Then
objfileError.WriteLine("Failed to get user object from " & sUserLDAPPath)
objfileError.WriteLine("Error: " & err.Description)
fOneError = True
err.Clear
End If
If ((fOneError = False) And (fAddedFMA = "True")) Then
Set objSDMailBox = objUser.MailboxRights
Set objDACLEX = objSDMailbox.DiscretionaryAcl
fRemovedFMA = RemoveFullMailboxAccess(objDACLEX, sGrantedUser)
If (err.number <> 0) Then
objfileError.WriteLine("Failed to Remove Full MailboxAccess from " & sUserLDAPPath)
objfileError.WriteLine("Error: " & err.Description)
fOneError = True
err.Clear
End If
If (fRemovedFMA = False) Then
objfileError.WriteLine("Couldn't find Full mailbox access permission on " & sUserLDAPPath)
End If
If ((fOneError = False) And (fRemovedFMA = True)) Then
objSDMailbox.DiscretionaryAcl = objDACLEX
objUser.MailboxRights = Array(objSDMailbox)
End If
End If
If ((fOneError = False) And (fAddedSendAs = "True")) Then
Set objSDNTsecurity = objUser.ntSecurityDescriptor
Set objDACLNT = objSDNTsecurity.DiscretionaryAcl
fRemovedSendAs = RemoveSendAs(objDACLNT, sGrantedUser)
If (err.number <> 0) Then
objfileError.WriteLine("Failed to Remove SendAs from " & sUserLDAPPath)
objfileError.WriteLine("Error: " & err.Description)
fOneError = True
err.Clear
End If
If (fRemovedSendAs = False) Then
objfileError.WriteLine("Couldn't find SendAs permission on " & sUserLDAPPath)
End If
If ((fOneError = False) And (fRemovedSendAs = True)) Then
objSDNTsecurity.DiscretionaryAcl = objDACLNT
objUser.Put "ntSecurityDescriptor", Array( objSDNTsecurity )
objUser.SetOption ADS_OPTION_SECURITY_MASK, ADS_SECURITY_INFO_DACL
End If
End If
If ((fOneError = False) And (fRemovedFMA Or fRemovedSendAs)) Then
objUser.SetInfo
If (err.number <> 0) Then
objfileError.WriteLine("Failed to update ADSI for user: " & sUserLDAPPath)
objfileError.WriteLine("Error: " & err.Description)
fOneError = True
err.Clear
Else
If ( fRemovedFMA Or fRemovedSendAs ) Then
'Update Logging
objfileError.WriteLine("Removed Permission from " & sUserLDAPPath & OUTPUT_DELIMITER & fRemovedFMA & OUTPUT_DELIMITER & fRemovedSendAs)
End If
End If
End If
If (fOneError = True) Then
WScript.StdOut.Write("!")
Else
WScript.StdOut.Write(".")
End If
Loop
End If
CloseImportexportFiles
Function IsValidUserName (sUserName)
Dim dPosition
dPosition = InStr(1, sUserName, "\")
If (dPosition = 0 ) Then
IsValidUserName = False
objfileError.WriteLine("Invalid User:" & sUserName)
Else
IsValidUserName = True
End If
End Function
Function CheckSendAs (objNTSD, sUser, fSendAs, AccessType)
Dim intACECount
Dim objACE
err.Clear
fSendAs = False
AccessType = ADS_ACETYPE_ACCESS_ALLOWED
intACECount = objNTSD.AceCount
If intACECount Then
For Each objACE In objNTSD
err.Clear
If ( (UCase(objACE.Trustee) = UCase(sUser)) And (objACE.ObjectType = EX_MB_SEND_AS_GUID) ) Then
fSendAs = True
AccessType = objACE.AceType
End If
Next
End If
If (err.number <> 0) Then
objfileError.WriteLine("Check SendAs permissions Failed : " & sUser)
objfileError.WriteLine("Error: " & err.Description)
err.Clear
fOneError = True
End If
Set objACE = Nothing
End Function
Function CheckFullMailboxAccess (objACL, sUser, fFoundFMA, AccessType)
Dim intACECount
Dim objACE
err.Clear
fFoundFMA = False
AccessType = ADS_ACETYPE_ACCESS_ALLOWED
intACECount = objACL.AceCount
If intACECount Then
For Each objACE In objACL
If ( (UCase(objACE.Trustee) = UCase(sUser)) And ((objACE.AccessMask And EX_FULLMAILBOX_ACCESSMASK) <> 0)) Then
fFoundFMA = True
AccessType = objACE.AceType
End If
Next
End If
If (err.number <> 0) Then
objfileError.WriteLine("Check FullMailbox permissions Failed : " & sUser)
objfileError.WriteLine("Error: " & err.Description)
err.Clear
fOneError = True
End If
Set ObjACE = Nothing
End Function
Function RemoveSendAs (objNTSD, sUser)
Dim intACECount
Dim objACE
Dim fFound
fFound = False
intACECount = objNTSD.AceCount
If intACECount Then
For Each objACE In objNTSD
If ((UCase(objACE.Trustee) = UCase(sUser)) And (objACE.ObjectType = EX_MB_SEND_AS_GUID) ) Then
objNTSD.RemoveAce objACE
fFound = True
End If
Next
End If
RemoveSendAs = fFound
End Function
Function RemoveFullMailboxAccess (objACL, sUser)
Dim intACECount
Dim objACE
Dim fFound
fFound = False
intACECount = objACL.AceCount
If intACECount Then
For Each objACE In objACL
If((0 <> Instr(UCase(objACE.Trustee), UCase(sUser))) And (objACE.AccessMask And EX_FULLMAILBOX_ACCESSMASK) <> 0) Then
objACE.AccessMask = (objACE.AccessMask Xor EX_FULLMAILBOX_ACCESSMASK)
fFound = True
End If
Next
End If
RemoveFullMailboxAccess = fFound
End Function
Function GetLDAPPathFromLegacyDN (sLegacyDN)
Dim rsUsers
Dim sLdapPath
objCommand.CommandText = "<GC://" & sDomainContainer & ">;(&(&(& (mailnickname=*) (| (&(objectCategory=person)(objectClass=user)(legacyExchangeDN=" & sLegacyDN & ")) ))));adspath;subtree"
objCommand.Properties("searchscope") = ADS_SCOPE_SUBTREE
objCommand.Properties("Page Size") = 10
objCommand.Properties("Timeout") = 30
objCommand.Properties("Chase referrals") = (ADS_CHASE_REFERRALS_SUBORDINATE Or ADS_CHASE_REFERRALS_EXTERNAL)
err.Clear
Set rsUsers = objCommand.Execute
If (err.number <> 0) Then
objfileError.WriteLine("Search for mailbox owners failed, error:" & err.Description)
fOneError = True
End If
If (rsUsers.RecordCount = 0) Then
objfileError.WriteLine("No mailbox owner user accounts found for " & sLegacyDN & " in " & sDomainContainer & ".")
fOneError = True
End If
If (rsUsers.RecordCount > 1) Then
objfileError.WriteLine("Multiple mailboxs owner user accounts found for " & sLegacyDN & " in " & sDomainContainer & ".")
fOneError = True
End If
sLdapPath = Replace(rsUsers.Fields(0).Value, "GC://", "LDAP://")
GetLDAPPathFromLegacyDN = sLdapPath
Set rsUsers = Nothing
End Function
Function CloseImportexportFiles
objfileError.WriteLine("*******************************************************")
objfileError.WriteLine("End at " & Date & " " & Time)
objfileError.WriteLine("*******************************************************")
objFSO.Close
objfileError.Close
objfileOutput.Close
objfileImport.Close
Set objFSO = Nothing
Set objfileError = Nothing
Set objfileOutput = Nothing
Set objfileImport = Nothing
End Function
Function CreateImportExportFiles
Dim sErrorsFileName
Dim sImportFileName
Dim sOutputFileName
err.Clear
Set objFSO = CreateObject("Scripting.FileSystemObject")
sErrorsFileName = ERROR_FILENAME
sImportFileName = EMPTYSTRING
sOutputFileName = EMPTYSTRING
Select Case cScriptMode
Case MODE_ADD
sImportFileName = WScript.Arguments(ARG_INDEX_FILENAME)
sOutputFileName = OUTPUT_FILENAME
Case MODE_REMOVE
sImportFileName = OUTPUT_FILENAME 'Use output file name as import file
sOutputFileName = EMPTYSTRING
Case Else
DisplaySyntax
End Select
Set objfileError = objFSO.OpenTextFile(sErrorsFileName, ForAppending, True, TristateTrue)
objfileError.WriteLine("*******************************************************")
objfileError.WriteLine("Start at " & Date & " " & Time)
objfileError.WriteLine("*******************************************************")
If (cScriptMode = MODE_REMOVE) Then
Set objfileImport = objFSO.OpenTextFile(sImportFileName, ForReading, False, TristateTrue)
Else
Set objfileImport = objFSO.OpenTextFile(sImportFileName, ForReading, False, TristateFalse)
End If
If (sOutputFileName <> EMPTYSTRING) Then
'Check if output file already exists.
If (objFSO.FileExists(sOutputFileName)) Then
Set objfileOutput = objFSO.OpenTextFile(sOutputFileName, ForReading, False, TristateTrue)
sOneRow = objfileOutput.ReadLine
'If user name in the file is different from parameter, we can't proceed.
If ( sOneRow <> sGrantedUser ) Then
WScript.StdOut.WriteLine("The Domain\User must be the same as " & sOneRow )
WScript.Quit
End If
Set objfileOutput = objFSO.OpenTextFile(sOutputFileName, ForAppending, True, TristateTrue)
Else
Set objfileOutput = objFSO.OpenTextFile(sOutputFileName, ForWriting, True, TristateTrue)
'The first line of Log file is the user who is going to be granted the permissions
objfileOutput.WriteLine(sGrantedUser)
End If
End If
If (err.number <> 0) Then
WScript.StdOut.WriteLine("Failed to open Log file, error:" & err.Description)
WScript.Quit
End If
End Function
Function AddAce(dacl, TrusteeName, gAccessMask, gAceType, gAceFlags, gFlags, gObjectType, gInheritedObjectType)
Dim Ace1
Set Ace1 = CreateObject("AccessControlEntry")
Ace1.AccessMask = gAccessMask
Ace1.AceType = gAceType
Ace1.AceFlags = gAceFlags
Ace1.Flags = gFlags
Ace1.Trustee = TrusteeName
'Determine whether ObjectType has to be set
If CStr(gObjectType) <> "0" Then
Ace1.ObjectType = gObjectType
End If
'Determine whether InheritedObjectType has to be set.
If CStr(gInheritedObjectType) <> "0" Then
Ace1.InheritedObjectType = gInheritedObjectType
End If
dacl.AddAce Ace1
Set Ace1 = Nothing
End Function
Function DisplaySyntax
WScript.StdOut.WriteLine("Syntax:")
WScript.StdOut.WriteLine()
WScript.StdOut.WriteLine("Grant Full mailbox access and SendAs permission to USER based on IMPORT_FILE:")
WScript.StdOut.WriteLine(" CSCRIPT " & WScript.ScriptName & " -Add DOMAIN\USER IMPORT_FILE")
WScript.StdOut.WriteLine(" NOTE: """ & OUTPUT_FILENAME & """ will be created for -Remove option ")
WScript.StdOut.WriteLine()
WScript.StdOut.WriteLine("Remove Full mailbox access and SendAs permission based on " & OUTPUT_FILENAME & ":")
WScript.StdOut.WriteLine(" CSCRIPT """ & WScript.ScriptName & """ -Remove ")
WScript.StdOut.WriteLine()
WScript.StdOut.WriteLine("For all modes, errors are saved to " & ERROR_FILENAME )
WScript.Quit
End Function
ÜberarbeitungenTabelle minimieren
Die Informationen in diesem Artikel beziehen sich auf:
Maschinell übersetzter ArtikelWichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten. Den englischen Originalartikel können Sie über folgenden Link abrufen: 930879
(http://support.microsoft.com/kb/930879/en-us/
)
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
| Weitere Ressourcen Weitere SupportseitenCommunityHilfe erhaltenSPRACHE AUSWÄHLEN
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Zum Anfang