Artigo: 930879 - Última revisão: terça-feira, 15 de Janeiro de 2008 - Revisão: 22.2 Utilização da ferramenta Exchange actualizações para calendário para alterações da hora de Verão de endereços para o Exchange Server
importante A actualização que é descrita neste artigo da base de dados de conhecimento da Microsoft foi substituída pela actualização é descrita no artigo da base de dados de conhecimento da Microsoft 941018. Certifique-se de que o Windows tem os dados de fuso horário mais recentes, instale a actualização descrita no artigo de base de dados de conhecimento da Microsoft 941018. Não é necessário desinstalar a actualização é descrita neste artigo da base de dados de conhecimento da Microsoft antes de instalar a actualização descrita artigo da base de dados de conhecimento 941018. Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base: 941018
(http://support.microsoft.com/kb/941018/
)
Como à hora de Verão utilizando a ferramenta de actualização de calendário do Exchange Nesta páginaINTRODUÇÃOHora de Verão é um sistema de definição relógios com antecedência para que ocorrem o nascer do Sol e pôr do Sol a uma hora posterior. O efeito consta Verão adicional à noite. Muitos países observar hora de Verão, apesar da maior parte ter as suas próprias regras e regulamentos para quando começa e termina. As datas da hora de Verão (também conhecida como hora de Verão) podem alterar o ano para ano e, os utilizadores têm que actualizar o calendário do Microsoft Office Outlook sempre que a lei de hora de Verão ou regras mudam. Datas entre as regras de hora de Verão anteriores e as regras da hora de Verão actuais são referidas neste artigo como o "período prolongado." Este artigo destaca as acções que pode tomar para itens Calendário endereço no Microsoft Outlook que ocorram durante o período prolongado de hora de Verão. Para mais informações sobre como preparar as alterações na hora de Verão de 2007 (hora de Verão de 2007) para todos os produtos Microsoft afectados, visite o seguinte Web site da Microsoft: http://www.microsoft.com/DST2007
(http://www.microsoft.com/DST2007)
Este artigo destaca as acções que devem ser recolhidas para actualizar itens que estão armazenados no Microsoft Exchange Server acordo com as novas regras de hora de Verão do calendário. A solução apresentada neste artigo envolve a ferramenta de actualização de calendário do Exchange (? a ferramenta do Exchange ?). A ferramenta do Exchange depende da ferramenta de actualização de dados de fuso horário para Microsoft Office Outlook (? a ferramenta do Outlook ?). Para obter mais informações sobre a ferramenta do Outlook, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base: 931667
(http://support.microsoft.com/kb/931667/
)
Como resolver as alterações da hora de Verão de 2007 utilizando a ferramenta de actualização de dados de fuso horário para Microsoft Office Outlook Sobre a ferramenta do ExchangeDepois de instalar as actualizações de hora de Verão para o Microsoft Windows, todos os compromissos antigos que ocorrem durante os períodos de alteração da hora de Verão serão apresentados incorrectamente como ocorra uma hora mais tarde. Isto acontece para compromissos periódicos ou ocorrência única. Estes compromissos tem de ser actualizados para que serão mostrados correctamente no Outlook, Outlook Web Access e aplicações baseadas em CDO.O Outlook fornece uma ferramenta que chama a ferramenta de actualização de dados de fuso horário para Microsoft Office Outlook. Esta ferramenta permite aos utilizadores actualizar calendários próprios. Nota No Microsoft Office Outlook 2007, a ferramenta de actualização de dados de fuso horário é criada. No entanto, recomendamos que utilize a versão autónoma da ferramenta de actualização de dados de fuso horário. 931667
(http://support.microsoft.com/kb/931667/
)
Como resolver as alterações da hora de Verão de 2007 utilizando a ferramenta de actualização de dados de fuso horário para Microsoft Office Outlook A ferramenta de actualização de calendário do Exchange ("a ferramenta do Exchange") permite-lhe evitar os desafios envolvidos quando implementar a ferramenta do Outlook bastante a todos os utilizadores e permite-lhe para se certificar de que cada utilizador executa a ferramenta correctamente.Descrição de alto nível da ferramenta do ExchangeA ferramenta do Exchange consiste em dois ficheiros executáveis separados. Estes ficheiros são descritos na seguinte tabela.Reduzir esta tabela
Versão 2 da ferramenta ExchangeVersão 2 da ferramenta de actualização de calendário do Exchange foi disponibilizado em 21 de Fevereiro de 2007. Este artigo refere-se a versão 2 da ferramenta do Exchange. Se estiver a executar a versão 1 a ferramenta do Exchange, desinstale-o e instale a versão 2. Versão 2 da ferramenta Exchange inclui os seguintes melhoramentos:
Riscos e limitações da execução da ferramenta ExchangeExistem duas questões a considerar antes de executar a ferramenta do Exchange. A tabela seguinte lista estes problemas, os respectivos efeitos potenciais no IT infra-estrutura e em utilizadores e as estratégias de mitigação.Reduzir esta tabela
Opções para actualizar as caixas de correioA tabela seguinte lista cinco opções que podem ser utilizadas para actualizar caixas de utilizador para utilizar as regras de fuso horário da hora de Verão de 2007.Reduzir esta tabela
Como instalar a ferramenta do ExchangeA ferramenta de actualização de calendário do Exchange está disponível no formato de ficheiro executável de extracção automática Msextmz.exe.Após a instalação, os ficheiros no directório de instalação devem incluem os seguintes ficheiros:
941018
(http://support.microsoft.com/kb/941018/
)
Como à hora de Verão utilizando a ferramenta de actualização de calendário do Exchange Idiomas suportados pela ferramenta do ExchangeA ferramenta do Exchange está disponível apenas em inglês. A ferramenta será executada apenas num computador em inglês (E.U.).Versões do Exchange Server que são compatíveis com a ferramenta do ExchangeA ferramenta do Exchange pode actualizar caixas de correio nas seguintes versões do Exchange Server:
Sistemas operativos suportados pela ferramenta do ExchangeA ferramenta do Exchange será executada nos seguintes sistemas operativos:
O que fazer antes de executar a ferramenta do ExchangeInstalar actualizaçõesAntes de executar a ferramenta do Exchange, certifique-se de que computadores cliente e servidor são correctamente actualizados com as seguintes actualizações:
Verifique se os requisitos de sistemaA ferramenta Exchange tem de ser executada num computador com o Microsoft Office Outlook 2003 ou Microsoft Office Outlook 2007 instalado e com a ferramenta de dados fuso horário do Outlook instalada. Além disso, o Microsoft .NET Framework versão 2.0 tem de estar instalado no computador cliente.O Outlook e a ferramenta de actualização de dados de fuso para Microsoft Office Outlook não fazem parte do pacote de transferência da ferramenta do Exchange. Têm de ser instalado separadamente. Nota Não confunda o pacote de instalação ferramenta Outlook denominado Tzmove.exe com real Outlook ferramenta ficheiro executável que também é chamado Tzmove.exe. Para executar a ferramenta do Exchange com êxito, o computador não tem de ter o valor de registo PickLogonProfile definido. Em alternativa, este valor de registo tem de ser definido como 0. Para determinar se existe este valor de registo, siga estes passos. importante Esta secção, método ou tarefa contém passos que indicam como modificar o registo. No entanto, poderão ocorrer problemas graves se modificar o registo de forma incorrecta. Por conseguinte, certifique-se de que segue estes passos cuidadosamente. Criar uma para protecção adicional, cópia de segurança do registo antes de o modificar. Em seguida, pode restaurar o registo se ocorrer um problema. Para obter mais informações sobre como efectuar uma cópia de segurança e restaurar o registo, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base: 322756
(http://support.microsoft.com/kb/322756/
)
Como efectuar uma cópia de segurança e restaurar o registo no Windows
Ferramenta de actualização de calendário do Microsoft Exchange não pode ser instalada com o Microsoft Exchange. Como configurar e executar Msextmz.exe manualmenteConfigurar o ficheiro Msextmz.iniO ficheiro Msextmz.ini deve estar configurado correctamente para Msextmz.exe a funcionar correctamente. Recomendamos que leia os comentários no Msextmz.ini ficheiro cuidadosamente antes de modificar o ficheiro Msextmz.ini.Especificar o modo de execução Msextmz.exeMsextmz.exe é executado em dois modos. Para especificar o modo de execução, parâmetros específicos tem de ser definido no ficheiro Msextmz.ini. A lista que se segue descreve os três modos e descreve como configurar os modos no ficheiro Msextmz.ini.
Configurar permissões para Msextmz.exeAs permissões são necessárias para executar Msextmz.exe dependem do modo de execução é utilizado. A tabela seguinte lista as permissões necessárias para cada modo de execução.Reduzir esta tabela
Script de "Caixa de correio de conceder permissões"Pode utilizar o script de GrantMailboxPermission.vbs exemplo para conceder direitos de Full Mailbox Access e enviar como de utilizador a todas as caixas de correio de um domínio.Este script pode ser executado apenas por um administrador do Exchange num computador com o Exchange 2000 Server ou Exchange Server 2003. Não é possível executar este script num computador com o Exchange Server 2007. No entanto, pode utilizar a shell de gestão do Exchange para conceder as permissões necessárias. O código para o script VBS é fornecido na secção "Referências". A tabela seguinte descreve os dois modos que este script é executado. Reduzir esta tabela
Nota O ficheiro de saída do modo de extracção de fuso horário não pode ser utilizado como um ficheiro de entrada para este script. Para criar o ficheiro de entrada para este script, pode colar o conteúdo do ficheiro de saída de extracção de fuso horário no bloco de notas, guardar o conteúdo como um novo documento e, em seguida, utilize o novo documento como ficheiro de entrada. Funcionamento do registo em modo de actualizaçãoRegistos da ferramenta de actualização de dados de fuso horário do OutlookQuando a ferramenta do Outlook é executada, a ferramenta cria um ficheiro de registo no directório temporário. Este ficheiro com o nome "Outlook Time Zone Update.log". Msextmz.exe extrai as informações de "Outlook Time Zone Update.log" e, em seguida, cria por utilizador ficheiros de registo no directório especificado no LogDirectory do ficheiro .ini.Estes ficheiros são denominados utilizando o seguinte formato: MSExTmz-User?s CN from the User DN-Random number. log Por exemplo, a ferramenta do Outlook regista as seguintes informações: MSExTmz-Utilizador3-0x0131273E.LOG A ferramenta do Outlook faz isto quando processa um utilizador com o DN seguinte: / O = ORGANIZAÇÃO/OU PRIMEIRA = PRIMEIRO ADMINISTRATIVE GROUP/CN = DESTINATÁRIOS/CN = USER3 Ficheiro de errosSe Msextmz.exe não consegue executar a ferramenta do Outlook contra qualquer caixa de correio, o DN do utilizador será registado no ficheiro de erro. Msextmz.exe não registará tudo ao ficheiro de erro se a ferramenta do Outlook é executado com êxito.Ficheiro de registoSe a opção de ficheiro de registo estiver configurada no ficheiro Msextmz.ini, as informações de Msextmz.exe de saída para a janela linha de comandos do comando também estão disponíveis no ficheiro especificado.Como executar Msextmzcfg.exeMsextmzcfg.exe automatiza o processo de extracção de fusos horários, da resolução de fusos horários para cada utilizador e de gerar os listas de utilizadores e os ficheiros .ini são necessários para executar Msextmzcfg.exe no modo de actualização. Recomendamos que utilize Msextmzcfg.exe para efectuar estes passos em vez de executar manualmente. Esta secção descreve como executar Msextmzcfg.exe.Permissões que são necessáriasA conta é utilizada para executar Msextmzcfg.exe tem de ter as seguintes permissões no cliente:
Exemplo de processo para actualizar um servidor do Exchange utilizando Msextmzcfg.exe
O que fazer depois de executar a ferramenta do ExchangeInstalar actualizaçõesDepois de concluir actualizar todos os servidores de Exchange no seu ambiente, instale a actualização seguinte nos servidores de Exchange:926666
(http://support.microsoft.com/kb/926666/
)
Actualização para as alterações da hora de Verão de 2007 para o Exchange 2003 Service Pack 2 Problemas conhecidos
Mensagens de erro e resoluções
ReferênciasScript de "Caixa de correio de conceder permissões"Option 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
RevisõesReduzir esta tabela
A informação contida neste artigo aplica-se a:
Tradução automáticaIMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado. Clique aqui para ver a versão em Inglês deste artigo: 930879
(http://support.microsoft.com/kb/930879/en-us/
)
| Outros Recursos Outros Sites de Suporte
ComunidadesObtenha Ajuda AgoraTraduções de Artigos |






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


Voltar ao topo