ID do artigo: 930879 - Última revisão: terça-feira, 15 de janeiro de 2008 - Revisão: 22.2 Usando a ferramenta de atualização do calendário do Exchange a alterações de horário de verão do endereço para Exchange Server
importante A atualização descrita neste artigo foi substituída pela atualizaçã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, instalar a atualização descrita no artigo da Base de dados de Conhecimento da Microsoft 941018. Não é necessário desinstalar a atualização descrita neste artigo antes de instalar a atualização descrita 941018 de artigo da Base de dados de Conhecimento da Microsoft. Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft: 941018
(http://support.microsoft.com/kb/941018/
)
Como o horário de verão de endereço usando a ferramenta de atualização Exchange calendário Nesta páginaINTRODUÇÃOHorário de verão é um sistema de configuração relógios em frente para que nascer e pôr-do-sol ocorram uma hora posterior. O efeito é verão adicional à noite. Muitos países observam o horário de verão, embora a maioria tem suas próprias regras e regulamentos para quando ela começa e termina. As datas de horário de verão (também conhecido como DST) podem alterar ano a ano e usuários precisará atualizar seu calendário do Microsoft Office Outlook sempre que o DST lei ou regras alterar. As datas entre as regras de hora de Verão anteriores e as regras de hora de verão atuais são conhecidas neste artigo como o "período prolongado." Este artigo se concentra nas ações que você pode tomar para itens de calendário de endereço no Microsoft Outlook que ocorrem durante o período prolongado. Para obter mais informações sobre como preparar para alterações no horário de verão de 2007 (hora de verão de 2007) para todos os produtos afetados da Microsoft, visite o seguinte site: http://www.microsoft.com/DST2007
(http://www.microsoft.com/DST2007)
Este artigo enfoca as ações que devem ser seguidas para atualizar itens que são armazenados no Microsoft Exchange Server acordo com a novas regras de hora de verão do calendário. A solução apresentada neste artigo envolve a ferramenta de atualização de calendário do Exchange (? a ferramenta Exchange ?). A ferramenta Exchange depende do ferramenta de actualização de dados de fuso horário para Microsoft Office Outlook (? a Outlook ferramenta ?). Para obter mais informações sobre a ferramenta do Outlook, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft: 931667
(http://support.microsoft.com/kb/931667/
)
Como resolver as alterações de horário de verão de 2007 utilizando a ferramenta de actualização de dados de fuso horário para Microsoft Office Outlook Sobre a ferramenta ExchangeDepois de instalar as atualizações de horário de verão para o Microsoft Windows, todos os compromissos antigos que ocorrem durante os períodos de alteração DST serão exibidos incorretamente como ocorrendo uma hora mais tarde. Isso é verdadeiro para compromissos recorrentes ou single-instance. Estes compromissos devem ser atualizados para que eles serão exibidos corretamente no Outlook, no Outlook Web Access e em aplicativos com base no CDO.O Outlook fornece uma ferramenta que é denominada o ferramenta de actualização de dados de fuso horário para Microsoft Office Outlook. Essa ferramenta permite que os usuários atualizar seus próprios calendários. Observação No Microsoft Office Outlook 2007, o ferramenta de actualização de dados de fuso horário está embutida. No entanto, recomendamos que você use a versão autônoma da ferramenta de atualização de dados de fuso horário. 931667
(http://support.microsoft.com/kb/931667/
)
Como resolver as alterações de horário 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 Exchange") permite que você a evitar os desafios que estão envolvidos ao implantar a ferramenta de Outlook amplamente para todos os usuários e permite que você Certifique-se de que cada usuário executa a ferramenta corretamente.Descrição de alto nível da ferramenta do ExchangeA ferramenta Exchange consiste em dois arquivos executáveis separados. Esses arquivos são descritos na tabela a seguir.Recolher esta tabela
Versão 2 da ferramenta ExchangeVersão 2 a ferramenta de actualização de calendário do Exchange foi lançada em 21 de fevereiro de 2007. Este artigo se refere à versão 2 da ferramenta Exchange. Se você estiver executando a ferramenta Exchange a versão 1, desinstalá-lo e instale a versão 2. Versão 2 da ferramenta Exchange inclui os seguintes aprimoramentos:
Riscos e limitações de executar a ferramenta do ExchangeHá duas questões a considerar antes de executar a ferramenta Exchange. A tabela a seguir lista esses problemas, seus possíveis efeitos sobre o IT infra-estrutura e em usuários e suas estratégias de atenuação.Recolher esta tabela
Opções para atualizar as caixas de correioA tabela a seguir lista cinco opções que podem ser usadas para atualizar caixas de correio usuário para usar regras de fuso horário de verão de 2007.Recolher esta tabela
Como instalar a ferramenta do ExchangeA ferramenta de actualização de calendário do Exchange está disponível no formato do arquivo executável auto-extraível Msextmz.exe.Após a instalação, os arquivos no diretório de instalação devem incluem os seguintes arquivos:
941018
(http://support.microsoft.com/kb/941018/
)
Como o horário de verão de endereço usando a ferramenta de atualização Exchange calendário Linguagens compatíveis com a ferramenta do ExchangeA ferramenta Exchange está disponível somente em inglês. A ferramenta será executada somente em um computador inglês (EUA).Versões do Exchange Server que são compatíveis com a ferramenta ExchangeA ferramenta Exchange pode atualizar as caixas de correio nas seguintes versões do Exchange Server:
Sistemas operacionais compatíveis com a ferramenta do ExchangeA ferramenta Exchange será executada nos seguintes sistemas operacionais:
O que fazer antes de executar a ferramenta do ExchangeInstalar atualizaçõesAntes de você executa a ferramenta Exchange, certifique-se que os computadores cliente e servidor são atualizadas corretamente com as seguintes atualizações:
Verificar os requisitos de sistemaA ferramenta Exchange deve ser executada em um computador que possui o Microsoft Office Outlook 2003 ou o Microsoft Office Outlook 2007 instalado e que tenha a ferramenta de dados de fuso horário Outlook instalado. Além disso, o Microsoft .NET Framework versão 2.0 deve ser instalado no computador cliente.O Outlook e a ferramenta de actualização de fuso dados para Microsoft Office Outlook não fazem parte do pacote de download da ferramenta do Exchange. Eles precisam ser instalados separadamente. Observação Não confunda o pacote de instalador de ferramenta Outlook chamado Tzmove.exe com o real Outlook ferramenta arquivo executável que também é chamado Tzmove.exe. Para executar a ferramenta Exchange com êxito, o computador não deve ter o valor de registro PickLogonProfile definido. Como alternativa, esse valor do registro deve ser definido como 0. Para determinar se esse valor do Registro existe, siga estas etapas. importante Esta seção, método ou tarefa contém etapas que informam sobre como modificar o registro. No entanto, sérios problemas poderão ocorrer se você modificar o registro incorretamente. Por isso, certifique-se que você execute essas etapas cuidadosamente. Para proteção adicional, fazer backup do registro antes de modificá-lo. Em seguida, você pode restaurar o registro se ocorrer um problema. Para obter mais informações sobre como fazer backup e restaurar o registro, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft: 322756
(http://support.microsoft.com/kb/322756/
)
Como fazer backup e restaurar o registro no Windows
Ferramenta de atualização do calendário do Microsoft Exchange não pode ser instalada com o Microsoft Exchange. Como configurar e executar Msextmz.exe manualmenteConfigurar o arquivo Msextmz.iniO arquivo Msextmz.ini deve ser configurado corretamente para Msextmz.exe seja executado corretamente. Recomendamos que você leia os comentários no Msextmz.ini arquivo cuidadosamente antes de modificar o arquivo 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 têm de ser definidas no arquivo Msextmz.ini. A lista a seguir descreve os três modos e descreve como configurar os modos no arquivo Msextmz.ini.
Configurar permissões para Msextmz.exeAs permissões são necessárias para executar Msextmz.exe dependem do modo de execução que é usado. A tabela a seguir lista as permissões que são necessários para cada modo de execução.Recolher esta tabela
Script de "Caixa de correio de conceder permissão"Você pode usar o script de GrantMailboxPermission.vbs exemplo para conceder direitos de Full Mailbox Access e Send As de usuário a todas as caixas de correio de um domínio.Esse script pode ser executado somente por um administrador do Exchange em um computador que esteja executando o Exchange 2000 Server ou Exchange Server 2003. Esse script não pode ser executado em um computador que está executando o Exchange Server 2007. No entanto, você pode usar o Shell de gerenciamento do Exchange para conceder as permissões necessárias. O código para o script VBS é fornecido na seção "Referências". A tabela a seguir descreve os dois modos em que esse script é executado. Recolher esta tabela
Observação O arquivo de saída do modo de extração de fuso horário não pode ser usado como um arquivo de entrada para esse script. Para criar o arquivo de entrada para esse script, você pode colar o conteúdo do arquivo de saída de extração de fuso horário no bloco de notas, salvar o conteúdo como um novo documento e, em seguida, usar o novo documento como arquivo de entrada. Como funciona o log no modo de atualizaçãoLogs da ferramenta de actualização de dados de fuso horárioQuando a ferramenta do Outlook é executada, a ferramenta cria um arquivo de log no diretório temp. Este arquivo é nomeado "Outlook Time Zone Update.log". Msextmz.exe extrai as informações de "Outlook Time Zone Update.log" e, em seguida, cria por usuário arquivos de log no diretório especificado no LogDirectory do arquivo .ini.Esses arquivos são nomeados usando o seguinte formato: MSExTmz-User?s CN from the User DN-Random number. log Por exemplo, a ferramenta do Outlook registra as seguintes informações: MSExTmz-Usuário3-0x0131273E.LOG A ferramenta de Outlook faz isso quando ele processa um usuário que tem o seguinte DN: / O = ORGANIZAÇÃO/OU PRIMEIRO = PRIMEIRO GRUPO ADMINISTRATIVO/CN = DESTINATÁRIOS/CN = USUÁRIO3 Erro ao arquivoNão é possível executar a ferramenta do Outlook contra qualquer caixa de correio a Msextmz.exe, efetuará o DN do usuário selecionado no arquivo de erro. Msextmz.exe não registrará nada no arquivo de erro se a ferramenta do Outlook foi executado com êxito.Arquivo de logSe a opção de arquivo de log estiver configurada no arquivo Msextmz.ini, as informações de saída do Msextmz.exe para a janela prompt de comando também estão disponíveis no arquivo especificado.Como executar Msextmzcfg.exeMsextmzcfg.exe automatiza o processo de extração de fusos horários, da resolução de fusos horários para cada usuário e de gerar as listas de usuários e os arquivos .ini são necessários para executar Msextmzcfg.exe no modo de atualização. Recomendamos que você use Msextmzcfg.exe para executar essas etapas em vez de executá-los manualmente. Esta seção descreve como executar Msextmzcfg.exe.Permissões necessáriasA conta que é usada para executar Msextmzcfg.exe deve ter as seguintes permissões no cliente:
Exemplo de processo para atualizar um servidor Exchange usando Msextmzcfg.exe
O que fazer depois de executar a ferramenta do ExchangeInstalar atualizaçõesDepois de atualizar todos os servidores Exchange em seu ambiente, instale a atualização seguinte nos servidores do Exchange:926666
(http://support.microsoft.com/kb/926666/
)
Atualização para alterações de horário de verão em 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ão"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õesRecolher 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes 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 deste artigo
|






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


Voltar para o início