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

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
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.
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): 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):

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.
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.
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.
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.
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.
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
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 FileSystemObjectConst ForReading = 1Const ForWriting = 2Const ForAppending = 8Const TristateTrue = -1Const TristateUseDefault = -2Const TristateFalse = 0'Permission Type: Allow or DenyConst ADS_ACETYPE_ACCESS_ALLOWED = &H0Const ADS_ACETYPE_ACCESS_DENIED = &H1Const ADS_ACETYPE_ACCESS_ALLOWED_OBJECT = &H5Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6Const ADS_ACEFLAG_INHERIT_ACE = &H2Const ADS_ACEFLAG_NO_PROPAGATE_INHERIT_ACE = &H4Const ADS_ACEFLAG_INHERIT_ONLY_ACE = &H8Const ADS_ACEFLAG_INHERITED_ACE = &H10Const ADS_ACEFLAG_VALID_INHERIT_FLAGS = &H1fConst ADS_ACEFLAG_SUCCESSFUL_ACCESS = &H40Const ADS_ACEFLAG_FAILED_ACCESS = &H80'Declare ADSI constantsConst ADS_SCOPE_SUBTREE = 2Const ADS_OPTION_SECURITY_MASK = 3Const ADS_OPTION_REFERRALS	= 1Const ADS_SECURITY_INFO_DACL = 4Const 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  = &H00100Const EX_FULLMAILBOX_ACCESSMASK = 1Const EX_MB_SEND_AS_GUID = "{AB721A54-1E2F-11D0-9819-00AA0040529B}"'Application Parameter IndexConst ARG_INDEX_MODE = 0Const ARG_INDEX_USERNAME = 1Const ARG_INDEX_FILENAME = 2Const MIN_ARG = 1Const MODE_INVALID = -1 Const MODE_ADD = 0Const MODE_REMOVE = 1Const ADD = "-ADD"Const REMOVE = "-REMOVE"'Application Const StringConst EMPTYSTRING = ""Const ERROR_FILENAME = "GrantMailboxPermission.err"Const OUTPUT_FILENAME = "GrantMailboxPermission.log"Dim OUTPUT_DELIMITEROUTPUT_DELIMITER = vbTab'Logging fileDim objFSODim objfileErrorDim objfileOutputDim objfileImportDim objconnDim objCommandDim rootDSEDim sDomainContainerDim sUserLDAPPathDim objUserDim objSDNTsecurityDim objDACLNTDim objDACLEXDim objSDMailboxDim fFMADim fSendAsDim AccessTypeForFMADim AccessTypeForSendASDim fAddedFMADim fAddedSendAsDim fRemovedFMADim fRemovedSendAsDim sArraySplitDim sOneRowDim sGrantedUserDim dArgCountDim cScriptModeDim dArgExpectedDim fOneErrorOn Error Resume Next'Parameter CheckingdArgCount = Wscript.Arguments.CountIf (dArgCount < MIN_ARG) Then	DisplaySyntaxEnd IfcScriptMode = MODE_INVALIDSelect 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_INVALIDEnd SelectIf (cScriptMode = MODE_INVALID Or dArgCount <> dArgExpected) Then	DisplaySyntaxEnd IfIf (cScriptMode = MODE_ADD) Then	sGrantedUser = WScript.Arguments(ARG_INDEX_USERNAME)	If (IsValidUserName(sGrantedUser) = False) Then		DisplaySyntax	End IfEnd IfCreateImportExportFilesIf (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	LoopSet rootDSE = NothingSet objCommand = NothingSet objconn = NothingEnd IfIf (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	LoopEnd IfCloseImportexportFilesFunction IsValidUserName (sUserName)	Dim dPosition	dPosition = InStr(1, sUserName, "\")	If (dPosition = 0 ) Then		IsValidUserName = False		objfileError.WriteLine("Invalid User:" & sUserName)	Else		IsValidUserName = True	End IfEnd FunctionFunction 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 = NothingEnd FunctionFunction 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 = NothingEnd FunctionFunction 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 FunctionFunction 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 FunctionFunction 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 = NothingEnd FunctionFunction 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 = NothingEnd FunctionFunction 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 IfEnd FunctionFunction 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 = NothingEnd FunctionFunction 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à

ID articolo: 930879 - Ultima revisione: 11/26/2007 01:35:00 - Revisione: 5.2

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

  • kbhowto kbinfo kbexpertiseinter KB930879
Feedback