Gestione dell'ora legale mediante lo strumento di aggiornamento del calendario di Exchange

Traduzione articoli Traduzione articoli
Identificativo articolo: 930879 - Visualizza i prodotti a cui si riferisce l?articolo.
Importante In questo articolo sono contenute informazioni su come modificare il Registro di sistema. Assicurarsi di eseguire il backup del Registro di sistema prima di modificarlo e di sapere come ripristinarlo in caso di problemi. Per ulteriori informazioni su come eseguire il backup, ripristinare e modificare il Registro di sistema, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
256986 Descrizione del Registro di sistema di Microsoft Windows
Espandi tutto | Chiudi tutto

In questa pagina

INTRODUZIONE

L'8 agosto 2005 il Congresso degli Stati Uniti ha approvato e il presidente George W. Bush ha firmato la legge detta "Energy Policy Act" del 2005. Tra i vari cambiamenti, questa legge modifica le date di inizio e di fine dell'ora legale nelle seguenti aree geografiche:
  • L'intero territorio degli Stati Uniti ad eccezione dell'Arizona, delle Hawaii, di Portorico, delle isole Vergini (USA) e delle isole Samoa (USA)
  • L'intero territorio del Canada
Nota La nazione Navajo dell'Arizona non utilizza l'ora legale.

Quando questa legge entrerÓ in vigore l'11 marzo 2007, l'ora legale inizierÓ tre settimane prima e terminerÓ una settimana dopo rispetto a quanto avvenuto finora. Questo cambiamento, noto in inglese con l'espressione "DST 2007", viene descritto nella tabella seguente.
Riduci questa tabellaEspandi questa tabella
Data inizio ora legaleData fine ora legale
Nuova11 marzo 2007 4 novembre 2007
Precedente1 aprile 200728 ottobre 2007
Secondo le nuove norme sull'ora legale, l'ora degli orologi deve essere modificata alle 02.00 ora locale negli Stati Uniti. Le date chiave per il 2007 sono le seguenti:
  • L'11 marzo 2007 l'ora passa dalle 01.59 alle 03.00.
  • Il 4 novembre 2007 l'ora passa dalle 01.59 alle 01.00.
A tali date si fa riferimento nel presente articolo con l'espressione "periodo esteso di validitÓ dell'ora legale".

Nota Il testo completo della legge "Energy Policy Act" Ŕ disponibile sul seguente sito Web (informazioni in lingua inglese):
http://energy.senate.gov/public/_files/ConferenceReport0.pdf
I dati relativi alla misurazione dell'ora legale si trovano alle pagine 52 e 53 del testo della legge "Energy Policy Act".

Sebbene la modifica dell'ora legale riguardi gli Stati Uniti e il Canada, essa influisce anche su persone e organizzazioni al di fuori dell'America settentrionale. Saranno infatti interessate le organizzazioni che hanno operazioni, clienti, partner o fornitori con sede nell'America settentrionale. Inoltre, saranno coinvolti i clienti e i sistemi che interagiscono o si integrano con sistemi situati nell'America settentrionale o con sistemi che si basano sul calcolo della data e dell'ora.

In questo articolo vengono descritte le azioni che occorre intraprendere per aggiornare gli elementi del calendario memorizzati in Microsoft Exchange Server in base alle nuove regole sull'ora legale. La soluzione offerta nel presente articolo implica l'utilizzo dello strumento di aggiornamento del calendario di Exchange (in breve, "strumento di Exchange"). Tale strumento si basa sullo strumento di aggiornamento dei dati sui fusi orari di Microsoft Outlook (in breve, "strumento di Outlook").
Per ulteriori informazioni sullo strumento di Outlook, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
931667 Gestione delle modifiche dell'ora legale nel 2007 mediante lo strumento di aggiornamento dei dati sui fusi orari di Microsoft Outlook
Per ulteriori informazioni su come prepararsi alle modifiche dell'ora legale nel 2007 per tutti i prodotti Microsoft interessati, visitare il seguente sito Web Microsoft (informazioni in lingua inglese):
http://www.microsoft.com/DST2007

Informazioni sullo strumento di Exchange

Dopo avere installato gli aggiornamenti dell'ora legale per Microsoft Windows e per Exchange Server, tutti i precedenti appuntamenti che hanno luogo durante i periodi interessati dalla modifica dell'ora legale verranno visualizzati erroneamente come programmati un'ora pi¨ tardi. Ci˛ vale sia per gli appuntamenti ricorrenti che per quelli che hanno luogo una sola volta. Tali appuntamenti devono essere aggiornati in modo che vengano visualizzati correttamente in Outlook, in Outlook Web Access e nelle applicazioni basate su CDO (Oggetti dati collaborativi, Collaboration Data Objects).

In Outlook Ŕ disponibile lo strumento di aggiornamento dei dati sui fusi orari che consente di aggiornare i calendari.

Nota In Microsoft Office Outlook 2007 lo strumento di aggiornamento del fuso orario Ŕ incorporato.

Lo strumento di Exchange consente di evitare i problemi posti dalla distribuzione dello strumento di Outlook a tutti gli utenti e permette di verificare che ciascun utente esegua lo strumento correttamente.

Descrizione dettagliata dello strumento di Exchange

Lo strumento di Exchange Ŕ costituito da due file eseguibili distinti. Tali file sono descritti nella seguente tabella.
Riduci questa tabellaEspandi questa tabella
Nome fileDescrizione
MSEXTMZ.exeQuesto file estrae le informazioni sui fusi orari dalle cassette postali su un server che esegue Exchange Server. Inoltre aggiorna i calendari delle cassette postali di uno specifico elenco di utenti utilizzando lo strumento di Outlook per ciascuno di essi.
MSEXTMZCFG.exeQuesto file Ŕ uno strumento di configurazione che descrive la maggior parte dei passaggi durante l'aggiornamento di un server di Exchange Server.

Limitazioni e rischi legati all'esecuzione dello strumento di Exchange

Prima di eseguire lo strumento di Exchange occorre considerare due problemi. Nella tabella seguente vengono riportati tali problemi, i loro potenziali effetti sull'infrastruttura IT e sugli utenti, nonchÚ le strategie di mitigazione.
Riduci questa tabellaEspandi questa tabella
Rischio EffettoMitigazione
Molti aggiornamenti di riunioni.Diminuzione delle prestazioni del server e della rete.Stabilire l'effetto sulle prestazioni del server e della rete aggiornando prima un ristretto numero di utenti. Se il carico Ŕ dirompente, eseguire lo strumento al di fuori dell'orario di lavoro o in orari di manutenzione dedicati.
Lo strumento richiede troppo tempo per la sua esecuzione.MSXTMZ.exe Ŕ un file eseguibile a thread singolo. Se lo si esegue in modalitÓ di aggiornamento a fronte di migliaia di utente contemporaneamente, potrebbe richiedere troppe ore o anche giorni per terminare le operazioni. Per velocizzare il processo di aggiornamento di tutte le cassette postali, occorre dividere gli utenti in gruppi, quindi eseguire istanze di MSXTMZ.exe su computer distinti per eseguire gli aggiornamenti.

Opzioni per l'aggiornamento delle cassette postali

Nella tabella seguente sono indicate cinque opzioni utilizzabili per aggiornare le cassette postali degli utenti al fine di utilizzare le nuove regole del fuso orario del 2007.
Riduci questa tabellaEspandi questa tabella
OpzioneProContro
Distribuire lo strumento di Outlook a ciascun utente, quindi chiedere agli utenti di aggiornare le proprie cassette postali.Questa opzione consente di evitare i rischi e le limitazioni legate all'esecuzione dello strumento di Exchange.╚ difficile garantire che tutti gli utenti eseguano lo strumento correttamente e in modo tempestivo. Gli utenti che non sono dotati di Outlook non potranno eseguire lo strumento di Outlook. Per ridurre il rischio di confusione da parte degli utenti occorre un addestramento supplementare.
Eseguire lo strumento di Exchange per tutti gli utenti e i server interessati.Questa opzione consente di semplificare l'operazione a vantaggio degli utenti.All'esecuzione dello strumento di Exchange sono associati i problemi descritti nella tabella precedente.
Eseguire lo strumento di Exchange e aggiornare solo gli appuntamenti ricorrenti. Fare in modo che gli utenti aggiornino gli appuntamenti una tantum nelle rispettive cassette postali utilizzando lo strumento di Outlook.Il livello di rischio Ŕ inferiore se gli appuntamenti una tantum vengono aggiornati in modo errato.I contro dell'esecuzione dello strumento di Outlook si sommano ai contro dell'esecuzione dello strumento di Exchange.
Non eseguire nÚ lo strumento di Exchange nÚ lo strumento di Outlook. Chiedere agli utenti di esaminare i calendari e di registrare nuovamente gli appuntamenti in base alle necessitÓ.Questa opzione consente di evitare i problemi legati all'esecuzione dello strumento di Exchange.Se tutti gli utenti non registrano nuovamente tutti gli appuntamenti interessati, alcuni elementi del calendario risulteranno posticipati di un'ora durante il periodo esteso di validitÓ dell'ora legale. Per ridurre il rischio di confusione da parte degli utenti occorre un addestramento supplementare.
Distribuire lo strumento di Outlook a ciascun utente e chiedere agli utenti di aggiornare le proprie cassette postali. Quindi, utilizzare la modalitÓ di estrazione del fuso orario disponibile nello strumento di Exchange per stabilire se gli utenti stanno eseguendo lo strumento di Outlook. Se gli utenti non stanno eseguendo lo strumento di Outlook, l'amministratore pu˛ eseguire lo strumento di Exchange.Questa opzione consente di ridurre il rischio che gli utenti non eseguano lo strumento in modo tempestivo nonchÚ di evitare i problemi legati all'esecuzione dello strumento di Exchange.Questa opzione non Ŕ utilizzabile se gli utenti eseguono Outlook 2007.

Come installare lo strumento di Exchange

Importante A causa di un problema noto, MSEXTMZ.exe e MSEXTMZCFG.exe non vengono eseguiti correttamente se sono installati nella directory di installazione predefinita (C:\Programmi\msextmz). Per ovviare a questo problema, installare i file nella directory seguente:
C:\msextmz
Lo strumento di aggiornamento del calendario di Exchange Ŕ disponibile sotto forma di file eseguibile autoestraente che estrae due file Microsoft Windows Installer: MSEXTMZ.msi e MSEXTMZCFG.msi. Tali file installano i file eseguibili dal medesimo nome.

Installare prima MSEXTMZ.exe, quindi installare MSEXTMZCFG.exe. Entrambi i file eseguibili devono essere installati nella stessa directory. Al termine dell'installazione, i file presenti nella directory di installazione devono essere i seguenti:
  • MSEXTMZ.exe
  • MSEXTMZCFG.exe
  • Daylight.prf

    Questo file Ŕ il file PRF principale utilizzato da MSEXTMZ.exe.
  • MSEXTMZ.ini

    Questo file Ŕ il file INI principale utilizzato da MSEXTMZ.exe.
  • MSEXTMZCFG.xml

    Questo file Ŕ il file di mappatura dei fusi orari che associa i fusi orari di Outlook, CDO e Outlook Web Access ai fusi orari del sistema operativo.

I seguenti file sono disponibili per il download dall'Area download Microsoft (informazioni in lingua inglese):
Download del pacchetto dello strumento di aggiornamento del calendario di Exchange.

Per facilitare l'installazione e l'utilizzo dello strumento di aggiornamento del calendario di Exchange Ŕ stata creata una macchina virtuale basata su Microsoft Windows Server 2003, Microsoft Office Outlook 2007, Microsoft Office Excel 2007 e Microsoft Office Word 2007. La macchina virtuale funziona sia in Virtual PC 2004 che in Virtual Server 2005 R2.

Per ulteriori informazioni sul download di file di supporto Microsoft, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
119591 Come ottenere file di supporto Microsoft dai servizi online
Il file Ŕ stato controllato e non contiene virus. Microsoft ha utilizzato il software antivirus pi¨ recente disponibile al momento della data di pubblicazione del file. Il file viene salvato su server con un livello di protezione avanzata che impedisce modifiche non autorizzate.

Lingue supportate dallo strumento di Exchange

L'unica versione disponibile dello strumento di Exchange Ŕ in lingua inglese. Lo strumento potrÓ essere eseguito solo su un computer con le impostazioni in lingua inglese (Stati Uniti).

Versioni di Exchange Server compatibili con lo strumento di Exchange

Lo strumento di Exchange Ŕ in grado di aggiornare le cassette postali delle seguenti versioni di Exchange Server:
  • Microsoft Exchange Server 2007
  • Microsoft Exchange Server 2003
  • Microsoft Exchange 2000 Server
  • Microsoft Exchange Server 5.5

Sistemi operativi supportati dallo strumento di Exchange

Lo strumento di Exchange potrÓ essere eseguito nei seguenti sistemi operativi:
  • Microsoft Windows Server 2003
  • Microsoft Windows XP
  • Microsoft Windows 2000
Windows Vista non Ŕ supportato.

Operazioni preliminari all'esecuzione dello strumento di Exchange

Installare gli aggiornamenti dell'ora legale

Prima di eseguire lo strumento di Exchange, assicurarsi che i computer client e server siano correttamente aggiornati con i necessari aggiornamenti del sistema operativo e dell'ora legale per le applicazioni. Tali aggiornamenti devono essere installati nell'ordine seguente:
  1. Installare sui server l'aggiornamento dell'ora legale per Windows.
  2. Installare sui client l'aggiornamento dell'ora legale per Windows.
  3. Installare l'aggiornamento dell'ora legale per Exchange in Exchange Server 2003, Exchange 2000 Server e Exchange Server 5.5.

    Nota Questo passaggio pu˛ essere completato insieme con il passaggio 1.

Verificare i requisiti di sistema

Lo strumento di Exchange deve essere eseguito in un computer dotato di Microsoft Office Outlook 2003 o Microsoft Office Outlook 2007 e sul quale Ŕ installato lo strumento dei dati sui fusi orari di Outlook. Inoltre, sul computer client deve essere installato Microsoft .NET Framework 2.0.

Outlook e lo strumento di Outlook non fanno parte del pacchetto scaricabile dello strumento di Exchange. Devono essere installati a parte.

Nota Non confondere il pacchetto del programma di installazione dello strumenti di Outlook, denominato TZMove.exe, con il file eseguibile dello strumento di Outlook, denominato anch'esso TZMove.exe.

Per eseguire correttamente lo strumento di Exchange, Ŕ necessario che sul computer non sia impostato il valore PickLogonProfile del Registro di sistema oppure che tale valore sia impostato su 0. Per stabilire se questo valore Ŕ presente nel Registro di sistema, attenersi alla procedura riportata di seguito.

Avviso L'errata modifica del Registro di sistema tramite l'editor o un altro metodo pu˛ causare seri problemi, che potrebbero richiedere la reinstallazione del sistema operativo. Microsoft non Ŕ in grado di garantire la soluzione di problemi derivanti dall'errato utilizzo dell'editor del Registro di sistema. La modifica del Registro di sistema Ŕ a rischio e pericolo dell'utente.
  1. Fare clic sul pulsante Start, scegliere Esegui, digitare regedit, quindi scegliere OK.
  2. Espandere la seguente sottochiave:
    HKEY_CURRENT_USER\Software\Microsoft\Exchange\client\options\
  3. Fare clic su options e verificare se il valore PickLogonProfile Ŕ presente. Se il valore PickLogonProfile Ŕ presente ed Ŕ impostato su 1, impostarlo su 0. A questo scopo, attenersi alla procedura seguente:
    1. Fare clic con il pulsante destro del mouse su PickLogonProfile e scegliere Modifica.
    2. Nella casella Dati valore digitare 0, quindi scegliere OK.
Lo strumento di Exchange non pu˛ essere eseguito in un computer con Exchange Server. Se si tenta di installare lo strumento di Exchange in un computer che esegue Exchange Server, viene visualizzato un messaggio di errore analogo al seguente:
Impossibile installare lo strumento di aggiornamento del calendario di Exchange con Microsoft Exchange.

Come eseguire MSEXTMZ.exe

Configurare il file MSEXTMZ.ini

Il file MSEXTMZ.ini deve essere configurato bene affinchÚ MSEXTMZ.exe possa essere eseguito correttamente. ╚ consigliabile leggere attentamente i commenti inclusi nel file MSEXTMZ.ini prima di modificarlo.

Specificare la modalitÓ di esecuzione di MSEXTMZ.exe

MSEXTMZ.exe pu˛ essere eseguito in tre diverse modalitÓ. Per specificare la modalitÓ di esecuzione desiderata, occorre impostare particolari parametri nel file MSEXTMZ.ini. Nell'elenco seguente vengono descritte le tre modalitÓ e la relativa configurazione nel file MSEXTMZ.ini.
  • Generazione dell'elenco degli utenti

    In questa modalitÓ, MSEXTMZ.exe si connette a un server che esegue Exchange Server ed enumera tutte le cassette postali del server. Questa modalitÓ consente di generare un file di output contenente l'elenco, separato da tabulazioni e delimitato da invii a capo, dei nomi distinti (DN) precedenti delle cassette postali.

    Per eseguire lo strumento in questa modalitÓ, Ŕ necessario configurare il file MSEXTMZ.ini nel modo seguente:
    • Lasciare senza commenti il parametro CommandLine.
    • Impostare il parametro OutputFile.
    • Impostare il parametro ErrorFile.
    • Impostare il parametro ServerDN.
    • Impostare su 0 il parametro ExportTimezones.
    • Impostare come commento i restanti parametri del file MSEXTMZ.ini.
    ╚ possibile ottenere il valore da utilizzare per il parametro ServerDN esaminando l'attributo LegacyExchangeDN dell'oggetto Exchange Server in Active Directory.
  • Estrazione dei fusi orari

    In questa modalitÓ, MSEXTMZ.exe estrae le informazioni sui fusi orari da ciascuna cassetta postale leggendo un insieme di proprietÓ MAPI.

    MSEXTMZ.exe Ŕ in grado di esaminare gli appuntamenti ricorrente organizzati dall'utente nel proprio calendario e quindi di determinare un fuso orario per tale utente. Questa opzione, tuttavia, utilizza molte risorse, quindi non Ŕ attivata per impostazione predefinita. Per attivarla, impostare il parametro ReadCalendarTimezones nel file MSEXTMZ.ini.

    MSEXTMZ.exe registra le informazioni sui fusi orari per ciascun utente in un file di output contenente l'elenco dei nomi distinti (DN) precedenti delle cassette postali. Ciascun nome distinto (DN) precedente di cassetta postale presenta i tipi seguenti di valori per il fuso orario:
    • Fuso orario di Outlook Web Access
    • Fuso orario di CDO
    • Fuso orario di Outlook
    • Fuso orario delle riunioni ricorrenti
    Il formato del file Ŕ analogo al seguente:
    DN_Utente\TAB Fuso_Orario_CDO\TAB Fuso_Orario_Outlook Web Access\TAB Fuso_Orario_Outlook\TAB Fuso_Orario_Riunioni_Ricorrenti INVIO A CAPO
    Se MSEXTMZ.exe non riesce a estrarre le informazioni sui fusi orari per alcuno dei quattro tipi di fuso orario, il nome distinto (DN) precedente delle cassette postali viene registrato nel file degli errori.

    Per associare l'utente a un solo fuso orario, Ŕ necessario importare il file di output in Microsoft Excel. In Excel, filtrare l'elenco degli utenti in base a uno dei fusi orari. Il fuso orario da utilizzare dipende dall'ambiente di lavoro.

    Se ad esempio la maggior parte degli utenti utilizza dispositivi BlackBerry, Exchange 5.5 Outlook Web Access o altre soluzioni basate su CDO, occorre filtrare l'elenco in base al fuso orario di CDO. Se la maggior parte degli utenti utilizza Exchange Outlook Web Access, occorre filtrare l'elenco in base al fuso orario di Outlook Web Access. Se la maggior parte degli utenti non rientra in alcuno di tali scenari, occorre filtrare l'elenco in base al fuso orario delle riunioni ricorrenti.

    Per eseguire lo strumento nella modalitÓ di estrazione dei fusi orari, configurare il file INI nel modo eseguente:
    • Lasciare senza commenti il parametro CommandLine.
    • Impostare il parametro OutputFile.
    • Impostare il parametro ErrorFile.
    • Impostare il parametro ServerDN.
    • Impostare su 1 il parametro ExportTimezones.
    • Impostare come commento i restanti parametri del file INI.
  • Aggiornamento

    In questa modalitÓ, il file MSEXTMZ.exe aggiorna tutte le cassette postali specificate nel file di input, il cui formato deve essere il seguente:
    DN_UtenteTABNome_Descrittivo_ServerTABChiave_Registro_Fuso_Orario_Sistema_OperativoINVIO A CAPO
    ╚ possibile eseguire una sola istanza di MSEXTMZ.exe su un client. Tuttavia, MSEXTMZ.exe pu˛ essere eseguito su pi¨ client contemporaneamente.

    Per eseguire MSEXTMZ.exe in questa modalitÓ, Ŕ necessario configurare il file MSEXTMZ.ini nel modo seguente:
    • Lasciare senza commenti il parametro CommandLine.
    • Impostare il parametro InputFile.
    • Impostare come commento il parametro OutputFile.
    • Impostare il parametro ErrorFile.
    • Impostare il parametro ServerDN.
    • Impostare come commento il parametro ExportTimezones.
    • Impostare il parametro PRFFile.
    • Impostare il parametro OutlookCommand.
    • Impostare il parametro OutlookKey.
    • Impostare come commento i restanti parametri.
    Nella modalitÓ di aggiornamento, MSEXTMZ.exe pu˛ essere eseguito per pi¨ server. Inoltre, il file di input pu˛ contenere utenti su server di Exchange diversi. Per impostare il file INI Ŕ necessario fornire il nome distinto (DN) di un server di Exchange. In questo caso, Ŕ sufficiente specificare il nome distinto (DN) di un server di Exchange dell'organizzazione di Exchange.

    Il valore del parametro OutlookCommand deve specificare il percorso del file eseguibile di Outlook (Outlook.exe). Il valore del parametro OutlookKey deve specificare il percorso delle impostazioni del Registro di sistema relative a Outlook.

    Per aggiornare solo gli appuntamenti ricorrenti, configurare il parametro CommandLine con il valore seguente:
    tzmove.exe /q /onlyrecurring
    Per aggiornare sia gli appuntamenti ricorrenti che quelli una tantum, utilizzare il valore predefinito di CommandLine.

Configurare le autorizzazioni per MSEXTMZ.exe

Le autorizzazioni necessarie per eseguire MSEXTMZ.exe dipendono dalla modalitÓ di esecuzione utilizzata. Nella tabella seguente vengono elencate le autorizzazioni necessarie per ciascuna modalitÓ di esecuzione.
Riduci questa tabellaEspandi questa tabella
ModalitÓ di esecuzioneAutorizzazioni
Generazione dell'elenco degli utentiAmministratore sola visualizzazione di Exchange (Amministratore di Exchange in Exchange Server 5.5)
Estrazione dei fusi orariAmministratore sola visualizzazione di Exchange (Amministratore di Exchange in Exchange Server 5.5)
Amministratore locale del computer che esegue MSEXTMZ.exe
AggiornamentoUtente del dominio dotato dei diritti Accesso completo alle cassette postali e Invia come per tutte le cassette postali (Amministratore del servizio di Exchange in Exchange Server 5.5)
Amministratore locale del computer che esegue MSEXTMZ.exe

Script per concedere l'autorizzazione per le cassette postali

╚ possibile utilizzare lo script di esempio GrantMailboxPermission.vbs per concedere i diritti Accesso completo alle cassette postali e Invia come a un utente del dominio per tutte le cassette postali.

Questo script pu˛ essere eseguito solo da un amministratore di Exchange su un computer dotato di Exchange 2000 Server o Exchange Server 2003, mentre non pu˛ essere eseguito su un computer dotato di Exchange Server 2007. Tuttavia Ŕ possibile utilizzare Exchange Management Shell per concedere le autorizzazioni necessarie.

Il codice dello script VBS Ŕ fornito nella sezione "Riferimenti". Nella tabella seguente vengono descritti due modalitÓ di utilizzo di tale script.
Riduci questa tabellaEspandi questa tabella
ModalitÓRiga di comandoDescrizione
AggiuntaCScript GrantMailboxPermission.vbs ?add Nome_Dominio\Nome_UtenteNome_FileConcede a Nome_Dominio\Nome_Utente i diritti Accesso completo alle cassette postali e Invia come per le cassette postali elencate nel file di input. Tale file deve essere un file di testo che contiene i nomi distinti (DN) precedenti delle cassette postali delimitati dall'invio a capo.

Lo script genera il file GrantMailboxPermission.log, nel quale sono registrate le cassette postali elaborate. La prima riga del file registro Ŕ l'utente Nome_Dominio\Nome_Utente al quale Ŕ concesso l'accesso. Non eliminare questo file. Il file viene utilizzato nella modalitÓ di rimozione.

Se all'utente Ŕ stato negato esplicitamente l'accesso, lo script registra l'informazione in un file denominato GrantMailboxPermission.err e non concede o modifica l'autorizzazione.

Se l'utente fa parte di un gruppo di protezione a cui Ŕ negato l'accesso, lo script concede le autorizzazioni Accesso completo alle cassette postali e Invia come. Tuttavia, l'utente non potrÓ accedere alla cassetta postale. Tutti gli errori verranno registrati nel file GrantMailboxPermission.err.
RimozioneCScript GrantMailboxPermission.vbs ?removeRimuove i diritti Accesso completo alle cassette postali e Invia come per le cassette postali elencate nel file dall'utente Nome_Dominio\Nome_Utente. L'utente Nome_Dominio\Nome_Utente Ŕ specificato nel file GrantMailboxPermission.log.
Nota Quando si esegue questo script sul computer Exchange Server, viene restituito un punto (.) se un utente viene elaborato correttamente. Lo script restituisce un punto esclamativo (!) se un utente viene elaborato con esito negativo.

Nota Il file di output della modalitÓ di estrazione dei fusi orari non pu˛ essere utilizzato come file di input per questo script. Per creare il file di input per questo script, Ŕ possibile incollare in Blocco note il contenuto del file di output della modalitÓ di estrazione dei fusi orari e quindi utilizzare il nuovo documento come file di input.

Funzionamento della registrazione nella modalitÓ di aggiornamento

Registri dello strumento di aggiornamento dei dati sui fusi orari di Outlook

Quando lo strumento di Outlook viene eseguito, viene creato un file registro nella directory temp. Tale file Ŕ denominato "Outlook Time Zone Update.log". MSEXTMZ.exe estrae le informazioni da questo file e crea file registro per ciascun utente nella stessa directory in cui si trova il file MASTER.prf.

Tali file vengono denominati in base al formato seguente:
MSExTmz-CN utente ricavato dal DN utente-Numero casuale.LOG
Ad esempio, lo strumento di Outlook registra le informazioni seguenti:
MSExTmz-USER3-0x0131273E.LOG
Questa operazione viene effettuata dallo strumento di Outlook quando viene elaborato un utente con il seguente nome distinto (DN):
/O=FIRST ORGANIZATION/OU=FIRST ADMINISTRATIVE GROUP/CN=RECIPIENTS/CN=USER3

File degli errori

Se MSEXTMZ.exe non riesce a eseguire lo strumento di Outlook per un cassetta postale, il nome distinto (DN) dell'utente viene registrato nel file degli errori. MSEXTMZ.exe non registra alcunchÚ nel file degli errori se lo strumento di Outlook Ŕ stato eseguito correttamente.

File registro

Se nel file MSEXTMZ.ini Ŕ configurata l'opzione relativa al file registro, l'output delle informazioni da MSEXTMZ.exe alla finestra del prompt dei comandi Ŕ disponibile anche nel file specificato.

ModalitÓ di esecuzione di MSEXTMZCFG.exe

MSEXTMZCFG.exe consente di automatizzare il processo di estrazione dei fusi orari per ciascun utente nonchÚ di generare l'elenco degli utenti e vari file INI necessari per l'esecuzione di MSEXTMZ.exe in modalitÓ di aggiornamento. In questa sezione viene descritto come eseguire MSEXTMZ.exe.

Autorizzazioni necessarie

L'account utilizzato per eseguire MSEXTMZ.exe deve disporre delle seguenti autorizzazioni per il client:
  • Amministratore sola visualizzazione di Exchange
  • Amministratore locale

Esempio del processo di aggiornamento di un server Exchange Server mediante MSEXTMZCFG.exe

  1. Sul computer client creare un profilo di Outlook che utilizzi la modalitÓ In linea. Quindi, configurare tale profilo come predefinito.

    Nota Il server di Exchange deve supportare la modalitÓ In linea.
  2. Eseguire MSEXTMZCFG.exe per avviare lo strumento di Exchange.
  3. Nella prima pagina della procedura guidata dello strumento di aggiornamento dei calendari di Exchange completare una delle procedure seguenti:

    Per estrarre il fuso orario di tutte le cassette postali su un server di Exchange, attenersi alla procedura seguente:
    1. Nella casella Server Domain Name digitare il nome distinto (DN) del server di Exchange.
    2. Nella casella Output File From Extraction digitare il nome del file che conterrÓ tutte le informazioni sui fusi orari delle cassette postali.
    3. Se si desidera estrarre i fusi orari delle riunioni ricorrenti, selezionare la casella di controllo Extract Recurring Meeting Time Zones.

      Importante Se si utilizza questa impostazione, la durata dell'esecuzione della modalitÓ di estrazione sarÓ notevolmente incrementata. Per impostazione predefinita, la casella di controllo Extract Recurring Meeting Time Zones non Ŕ selezionata.
    4. Scegliere Next.


    Per saltare l'estrazione dei fusi orari, attenersi alla procedura seguente:
    1. Selezionare la casella di controllo Skip time zone extraction. Per impostazione predefinita, la casella di controllo Skip time zone extraction non Ŕ selezionata.
    2. Nella casella Output File From Extraction digitare il nome di un file di output di una precedente esecuzione di un'estrazione di fusi orari.
    3. Nella casella Server Domain Name digitare il nome distinto (DN) del server di Exchange utilizzato per generare il file di output specificato al passaggio 3b.
    4. Scegliere Next.
  4. Nella finestra di dialogo Choose Profile scegliere OK.
  5. Al termine del processo di estrazione dei fusi orari, MSEXTMZCFG.exe analizza il file di output e tenta di associare i fusi orari delle cassette postali degli utenti agli effettivi fusi orari del sistema operativo.

    Se non Ŕ possibile associare alcuni fusi orari, Ŕ necessario effettuare questa operazione manualmente. Scegliere Next per salvare le nuove associazioni.
  6. Al termine del processo di estrazione dei fusi orari, MSEXTMZCFG.exe analizza il file di output e tenta di associare i fusi orari delle cassette postali degli utenti agli effettivi fusi orari del sistema operativo.

    Se non Ŕ possibile associare alcuni fusi orari, Ŕ necessario effettuare l'operazione manualmente nella pagina Map Time Zone. A questo scopo, fare clic sul fuso orario di Windows che corrisponde al fuso orario dell'utente nell'elenco Windows Time Zone, quindi scegliere Next.
  7. Al termine del processo di associazione, MSEXTMZCFG.exe classifica gli utenti nei gruppi seguenti:
    • Utenti con un solo fuso orario (ad esempio, gli utenti con il fuso orario di CDO, Outlook Web Access, Outlook o delle riunioni ricorrenti) o utenti con pi¨ fusi orari associati allo stesso fuso orario del sistema operativo
    • Utenti con pi¨ fusi orari associati a fusi orari diversi del sistema operativo
    • Utenti privi di informazioni sui fusi orari
    MSEXTMZCFG.exe consente di salvare in file di testo distinti l'elenco degli utenti con fusi orari in conflitto e con fusi orari inesistenti. A questo scopo, attenersi alla seguente procedura:
    1. Nell'area Users with conflicting time zone information, digitare ConflictUsers.txt nella casella Output File.
    2. Nell'area Users with no time zone information, digitare NonExistent.txt nella casella Output File.
  8. Nella pagina Calendar update configuration fornire le informazioni necessarie per generare i file di input con l'elenco degli utenti, i file INI e i file batch con cui aggiornare le cassette postali. A questo scopo, attenersi alla seguente procedura:
    1. Nell'elenco Select time zones that need to be updated selezionare la casella di controllo relativa ai fusi orari da aggiornare.
    2. Nella casella Number of Batch Files digitare il numero di gruppi di utenti da generare.

      Queste informazioni sono utili qualora si intenda ridurre la durata di esecuzione dell'aggiornamento. A questo fine Ŕ possibile dividere un vasto elenco di utenti in gruppi pi¨ piccoli e quindi eseguire pi¨ istanze di MSEXTMZ.exe nella modalitÓ di aggiornamento. Tale operazione deve essere effettuata su computer distinti, e ogni istanza di MSEXTMZ.exe deve elaborare un diverso gruppo di utenti.

      Nota Non Ŕ possibile eseguire pi¨ istanze di MSEXTMZ.exe sullo stesso computer client.
    3. Nella casella Outlook executable path digitare il percorso del file eseguibile di Outlook.
    4. Nella casella TZMove.exe path digitare il percorso dello strumento di Outlook e i relativi parametri. Se si desidera aggiornare solo le riunioni ricorrenti, selezionare la casella di controllo Recurring meetings only.
    5. Nella casella Outlook registry path digitare il percorso del registro di Outlook.
    6. Nella casella Profile creation delay (seconds) digitare il numero di secondi di ritardo per la creazione del profilo. ╚ consigliabile utilizzare il valore predefinito di 15 secondi.
    7. Nella casella Per Mailbox Timeout (minutes) digitare il numero di minuti di attesa prima che si verifichi il timeout per lo strumento di Outlook. ╚ consigliabile utilizzare il valore predefinito di 15 minuti.
  9. Scegliere Finish. MSEXTMZCFG.exe genera una sottodirectory nell'attuale directory di esecuzione. Il nome della sottodirectory equivale al nome descrittivo del server di Exchange. Nella sottodirectory sono contenuti i seguenti file:
    • MSExTmz_x.ini

      Si tratta del file INI utilizzato da MSEXTMZ.exe per l'esecuzione in modalitÓ di aggiornamento. x sta per il numero del gruppo.
    • Mailboxes__x.txt

      Si tratta del file di input con l'elenco degli utenti utilizzato da MSEXTMZCFG.exe per l'esecuzione in modalitÓ di aggiornamento. x sta per il numero del gruppo.
    • MSExTmz__x.bat

      Si tratta del file batch che esegue MSEXTMZCFG.exe in modalitÓ di aggiornamento per gli utenti specificati nel file Mailboxes__x.txt.
    • NonExistent.txt

      Questo file contiene l'elenco degli utenti privi di informazioni sui fusi orari nelle rispettive cassette postali.
    • ConflictUsers.txt

      Questo file contiene l'elenco degli utenti con fusi orari in conflitto.
  10. Attenersi alla seguente procedura:
    1. Avviare Outlook e verificare che venga effettuata correttamente la registrazione sul server mediante il profilo predefinito e senza che venga chiesto di selezionare un profilo.
    2. Verificare che durante l'avvio di Outlook non venga visualizzata alcuna richiesta. MSEXTMZ.exe non pu˛ essere eseguito se vengono visualizzate delle richieste.
    3. Verificare che il seguente file non esista:
      %USERPROFILE%\Impostazioni locali\Dati applicazioni\Microsoft\Outlook\Extend.dat
      Se esiste, rinominarlo.
    Aggiornare le cassette postali spostandosi nella sottodirectory denominata come il server ed eseguendo i file batch uno alla volta. Per eseguire correttamente i file batch, Ŕ necessario utilizzare un account dotato dei diritti Accesso completo alle cassette postali e Invia come per le cassette postali da aggiornare.

Problemi noti

  • Non Ŕ possibile installare lo strumento di Exchange

    Lo strumento di Exchange non pu˛ essere installato correttamente se esiste una delle seguenti chiavi del Registro di sistema:
    • HKEY_CLASS_ROOT\Outlook.Application.9
    • HKEY_CLASS_ROOT\Outlook.Application.10
    In tal caso, viene visualizzato un messaggio di errore analogo al seguente quando si tenta di installare lo strumento di Exchange:
    Impossibile installare lo strumento Exchange Server Calendar Rebasing Tool con questa versione di Microsoft Outlook.
    Per ovviare a questo problema, eliminare queste chiavi del Registro di sistema, installare lo strumento di Exchange e poi ripristinare le chiavi.
  • Fuso orario ambiguo

    Gli elementi ricorrenti del calendario creati mediante le regole per l'ora legale del 2006 con il fuso orario della costa del Pacifico (PST) in Outlook 2003 o nelle versioni precedenti di Outlook non vengono aggiornati dallo strumento di Outlook. Questo problema riguarda MSEXTMZ.exe perchÚ esegue lo strumento di Outlook.

    Per ovviare a questo problema, modificare il Registro di sistema in modo che dal computer che esegue MSEXTMZ.exe vengano rimossi i fusi orari del Messico. Eseguire MSEXTMZCFG.exe in modalitÓ di aggiornamento, quindi ripristinare i fusi orari del Messico nel Registro di sistema. A questo scopo, attenersi alla procedura descritta di seguito.

    Avviso L'errata modifica del Registro di sistema tramite l'editor o un altro metodo pu˛ causare seri problemi, che potrebbero richiedere la reinstallazione del sistema operativo. Microsoft non Ŕ in grado di garantire la soluzione di problemi derivanti dall'errato utilizzo dell'editor del Registro di sistema. La modifica del Registro di sistema Ŕ a rischio e pericolo dell'utente.
    1. Eseguire il backup del Registro di sistema.
    2. Fare clic sul pulsante Start, scegliere Esegui, digitare regedit, quindi scegliere OK.
    3. Espandere la seguente sottochiave:
      HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones
    4. Fare clic con il pulsante destro del mouse su Mexico Standard Time, quindi scegliere Elimina.
    5. Nella finestra di dialogo Conferma eliminazione chiave scegliere .
    6. Fare clic con il pulsante destro del mouse su Mexico Standard Time 2, quindi scegliere Elimina.
    7. Nella finestra di dialogo Conferma eliminazione chiave scegliere .
    8. Eseguire MSEXTMZCFG.exe in modalitÓ di aggiornamento.
    9. Ripristinare il Registro di sistema dal backup creato al passaggio 1.
    Per informazioni su come eseguire il backup e ripristinare il Registro di sistema, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
    256986 Descrizione del Registro di sistema di Microsoft Windows
  • Esiste un limite al numero di cassette postali per server che Ŕ possibile elaborare

    Nella modalitÓ di generazione dell'elenco di utenti e nella modalitÓ di estrazione dei fusi orari, MSEXTMZ.exe pu˛ elaborare solo 65.535 cassette postali per server. Se il server ha pi¨ di 65.535 cassette postali, alcune di esse non vengono elaborate.
  • Occorre riavviare il computer client dopo l'aggiornamento di 10.000 cassette postali

    Quando si esegue MSEXTMZ nella modalitÓ di aggiornamento, Ŕ consigliabile riavviare il computer client dopo l'aggiornamento di 10.000 cassette postali in modalitÓ di aggiornamento. Ci˛ avviene a causa di un problema di memoria in MAPI.

    Inoltre Ŕ consigliabile non creare file di input con pi¨ di 10.000 cassette postali.
  • Possibili conflitti nelle assegnazioni delle sale riunioni

    Quando si utilizza lo strumento di Outlook, le riunioni vengono spostate all'orario corretto. Tuttavia ci˛ pu˛ causare conflitti con le assegnazioni delle sale riunioni.

    Se si esegue Exchange Server 2007, Ŕ consigliabile impostare su 3 il limite di conflitto per Supervisore prenotazione risorse in Exchange 2007. Al termine dell'aggiornamento di tutte le cassette postali, i conflitti vengono risolti automaticamente.

    Se si esegue Exchange Server 2003, Exchange 2000 Server o Exchange Server 5.5 insieme con l'Agente AutoAccept, Ŕ possibile che gli utenti ricevano un messaggio di rifiuto della sala riunioni. In questo caso, gli utenti devono individuare un altro orario disponibile o una diversa sala riunioni.
  • I calendari delle cartelle pubbliche non vengono aggiornati

    Lo strumento di Exchange non aggiorna i calendari delle cartelle pubbliche. Per aprire un calendario delle cartelle pubbliche, l'utente deve eseguire lo strumento di Outlook in modalitÓ interattiva e quindi selezionare manualmente la cartella del calendario da aggiornare.
  • Occorre utilizzare "Esegui come" nella riga di comando

    Se si intende eseguire MSEXTMZ.exe mediante "Esegui come" nella riga di comando, assicurarsi di utilizzare "Esegui come" anche per configurare l'editor del Registro di sistema per impostare il valore PickLogonProfile del Registro di sistema.
  • MSEXTMZ.exe pu˛ bloccarsi

    Alcuni problemi con i server del catalogo globale possono causare il blocco di MSEXTMZ.exe. Se ci˛ accade, attenersi alla seguente procedura:
    1. Arrestare MSEXTMZ.exe.
    2. Se il parametro Logfile Ŕ stato impostato nel file MSEXTMZ.ini, individuare quale cassetta postale era in corso di elaborazione. La voce Processing Mailbox del file registro indica il nome distinto (DN) dell'utente della cassetta postale in corso di elaborazione quando MSEXTMZ.exe si Ŕ bloccato.

      Se il parametro Logfile non Ŕ stato impostato nel file MSEXTMZ.ini, le informazioni relative alla cassetta postale in corso di elaborazione possono essere reperite nella finestra del prompt dei comandi.

      Tutte le cassette postali successive a quella in corso di elaborazione al momento del blocco di MSEXTMZ.exe non vengono elaborate. Ci˛ vale per le cassette postali indicate nel file NomeServer_FusoOrario_Input_File.txt utilizzato come file di input per questa esecuzione.
    3. Creare un nuovo file di input contenente i nomi distinti delle cassette postali non elaborate.
    4. Prima di eseguire nuovamente MSEXTMZ.exe con questo nuovo file di input, accertarsi di avervi incluso gli utenti indicati nel file degli errori generato dalla precedente esecuzione.
  • ╚ possibile eseguire lo strumento di Outlook e lo strumento di Exchange nello stesso ambiente

    ╚ possibile eseguire lo strumento di Outlook e lo strumento di Exchange nello stesso ambiente. Se si esegue lo strumento di Exchange per una cassetta postale che Ŕ giÓ stata aggiornata mediante lo strumento di Outlook o viceversa, non si verificano effetti collaterali. Se tuttavia l'amministratore esegue lo strumento di Exchange, non Ŕ necessario che gli utenti eseguano separatamente lo strumento di Outlook.
  • I promemoria vengono visualizzati pi¨ tardi del previsto

    I promemoria delle riunioni delle cassette postali aggiornate tramite lo strumento di Exchange non vengono aggiornati se Outlook non Ŕ mai stato utilizzato per accedere alla specifica cassetta postale in modalitÓ In linea. I promemoria vengono visualizzati un'ora dopo il previsto.
  • Il parametro ProfileCreationTimeLimit deve essere impostato correttamente

    Quando viene specificato un file di input nella modalitÓ di aggiornamento o in quella di estrazione dei fusi orari, MSEXTMZ.exe utilizza Outlook per creare i profili sul computer client.

    Il parametro ProfileCreationTimeLimit del file INI specifica quanto tempo MSEXTMZ.exe deve attendere che Outlook crei ciascun profilo. Se il tempo di attesa Ŕ troppo breve, i profili non vengono creati e MSEXTMZ.exe si interrompe. Il tempo di attesa Ŕ inversamente proporzionale alle prestazioni del computer client.

    Per impostazione predefinita, il valore del parametro ProfileCreationTimeLimit Ŕ di 15 secondi. Questa impostazione Ŕ da considerarsi valida su un computer con processore AMD Opteron 275 (2,18 GHz) e 4 GB di RAM.

    Se lo strumento di Exchange viene eseguito su un computer pi¨ lento, Ŕ consigliabile incrementare il valore del ritardo. Se si incrementa tale valore, il tempo di esecuzione complessivo di MSEXTMZ.exe in modalitÓ di aggiornamento pu˛ aumentare.
  • Il tempo di esecuzione pu˛ essere lungo

    MSXTMZ.exe Ŕ un file eseguibile a thread singolo. Pertanto pu˛ richiedere molte ore per essere eseguito a fronte di molte cassette postali. Nella tabella seguente vengono forniti i dati di riferimento per alcuni valori del tempo di esecuzione di MSEXTMZ.exe nella modalitÓ di aggiornamento. Nella tabella vengono presupposte le seguenti configurazioni:

    Configurazione hardware del server
    • Processore: AMD Opteron 275 (2,18 GHz)
    • RAM: 4 GB
    Configurazione hardware del client
    • Processore: AMD Opteron 275 (2,18 GHz)
    • RAM: 4 GB
Riduci questa tabellaEspandi questa tabella
Numero totale di elementi di calendario interessati Numero di cassette postaliNumero di elementi di calendario per cassetta postale interessatiTempo di esecuzione
402020.04.16
50025200.12.52
50050100.16.16
100050200.21.21
2000100200.43.06
200050400.50.16
In relazione alle esecuzioni in modalitÓ di aggiornamento indicate nella tabella, ogni elemento di calendario contiene due partecipanti: l'organizzatore della riunione e un altro utente.

Il numero di invitati indicato in una richiesta di riunione non dovrebbe incidere sul tempo di esecuzione nella modalitÓ di aggiornamento perchÚ, dal punto di vista del computer client, l'invio di un aggiornamento di una riunione a un destinatario richiede lo stesso tempo dell'invio dello stesso aggiornamento a cento destinatari.

Il numero di invitati incide sul numero di copie dell'aggiornamento della riunione. Tuttavia, ci˛ costituisce un problema del flusso di posta, non del tempo di esecuzione.

Riferimenti

Script per concedere l'autorizzazione per le cassette postali

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

ProprietÓ

Identificativo articolo: 930879 - Ultima modifica: lunedý 26 novembre 2007 - Revisione: 5.2
Le informazioni in questo articolo si applicano a
  • Microsoft Exchange Server 2007 Enterprise Edition
  • Microsoft Exchange Server 2007 Standard Edition
  • Microsoft Exchange Server 2003 Enterprise Edition
  • Microsoft Exchange Server 2003 Standard Edition
  • Microsoft Exchange 2000 Server Standard Edition
  • Microsoft Exchange Server 5.5 Standard Edition
Chiavi:á
kbhowto kbinfo kbexpertiseinter KB930879
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com