Exchange 予定表更新ツールを使用して夏時間に対応する方法

文書翻訳 文書翻訳
文書番号: 930879 - 対象製品
重要 : この資料には、レジストリの編集方法が記載されています。万一に備えて、編集の前には必ずレジストリをバックアップし、レジストリの復元方法を理解しておいてください。バックアップ、復元、および編集方法の詳細を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
256986 Microsoft Windows レジストリの説明
すべて展開する | すべて折りたたむ

目次

はじめに

2005 年 8 月 8 日、米国議会で 2005 年エネルギー政策法 (Energy Policy Act) が可決され、ジョージ W ブッシュ大統領が署名しました。この法令により、以下の地域での夏時間 (DST : Daylight Saving Time) の開始日と終了日が変更されます。
  • アリゾナ州、ハワイ州、プエルトリコ、ヴァージン諸島、および米領サモアを除く米国全土
  • カナダ全土が新しい DST 開始日および終了日に準拠します。
  • アリゾナ州のナバホ国も DST に準拠します。
この法令が 2007 年 3 月 11 日に施行されると、DST は従来より 3 週間早く始まり、1 週間遅く終了します。この変更は通常 DST 2007 と呼ばれます。変更内容は以下のとおりです。
元に戻す全体を表示する
DST 開始日 DST 終了日
2007 年 3 月 11 日 2007 年 11 月 4 日
2007 年 4 月 1 日 2007 年 10 月 28 日

DST 2007 の規則では、米国の各地域の現地時刻で午前 02:00 に時刻が変更されます。2007 年で重要となる日付を以下に示します。
  • 2007 年 3 月 11 日、午前 01:59 の次は午前 03:00 に時計が進みます。
  • 2007 年 11 月 4 日、午前 01:59 の次は午前 01:00 に時計が戻ります。
この資料では、上記の日付を "DST の延長期間" と呼びます。

DST の変更が適用されるのは米国およびカナダですが、北米以外のユーザーや組織にも影響を及ぼします。変更が適用される北米地域に業務、顧客、パートナー、ベンダを持つ組織は影響を受けます。また、北米地域を基準にしているシステムや、日時計算に依存しているシステムと相互運用や統合が行われているユーザーやシステムも影響を受けます。

この資料では、Microsoft Exchange Server に格納されている予定表アイテムを、新しい DST 規則に従って更新する際に必要な操作に重点を置いて説明します。この資料に記載されている解決方法では、Exchange 予定表更新ツール ("Exchange ツール") が必要です。Exchange ツールは、Microsoft Office Outlook 用のタイム ゾーン データ更新ツール ("Outlook ツール") に依存します。
Outlook ツールの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
931667 Outlook 用タイム ゾーン データ更新ツールを使用した夏時間への対応
2007 年の夏時間変更で影響を受けるマイクロソフトの全製品における、変更に対する準備方法の関連情報については、以下のマイクロソフト Web サイトを参照してください。
http://www.microsoft.com/DST2007

Exchange ツールについて

Microsoft Windows 用の DST 更新プログラムをインストールすると、DST の延長期間内に設定されている古い予定はすべて、正しい時刻より 1 時間遅く表示されます。この現象は、定期的な予定と単独の予定の両方で発生します。これらの予定は、Outlook、Outlook Web Access、および CDO ベースのアプリケーションで正しく表示されるように更新する必要があります。

Outlook で提供されている Microsoft Office Outlook 用タイム ゾーン データ更新ツールを使用すると、各ユーザーが自分の予定表を更新することができます。

: Microsoft Office Outlook 2007 には、タイム ゾーン データ更新ツールが組み込まれていますが、スタンドアロン版のタイム ゾーン データ更新ツールを使用することをお勧めします。
931667 Outlook 用タイム ゾーン データ更新ツールを使用した夏時間への対応
Exchange 予定表更新ツール ("Exchange ツール") を使用すると、Outlook ツールを全ユーザーに広く展開する必要がなく、各ユーザーについて適切にツールが実行されます。

Exchange 予定表更新ツールのインストールおよび使用に役立つように、仮想コンピュータ (VM) が作成されました。仮想コンピュータは、Microsoft Windows Server 2003、Microsoft Office Outlook 2007、Microsoft Office Excel 2007、および Microsoft Office Word 2007 に基づいています。仮想コンピュータは、Virtual PC 2004 および Virtual Server 2005 R2 の両方で機能します。 関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
933185 Exchange 組織での DST 2007 予定表更新プログラムの展開に役立つ仮想コンピュータについて

Exchange ツールの詳細説明

Exchange ツールは 2 つの実行可能ファイルに分かれています。各ファイルの説明は次の表のとおりです。
元に戻す全体を表示する
ファイル名 説明
Msextmz.exe Exchange Server を実行しているサーバー上のメールボックスからタイム ゾーン情報を抽出します。また、一覧で指定されている各ユーザーに対して Outlook ツールを起動することにより、それらのユーザーのメールボックスの予定表を更新します。
Msextmzcfg.exe Exchange Server サーバーを更新する手順の多くを実行する構成ツールです。

Exchange ツール バージョン 2

Exchange 予定表更新ツールのバージョン 2 が、2007 年 2 月 21 日にリリースされました。この資料では、Exchange ツール バージョン 2 について説明します。Exchange ツール バージョン 1 を実行している場合は、アンインストールしてバージョン 2 をインストールしてください。Exchange ツール バージョン 2 は、次の点が強化されています。
  • Update モードで実行した場合、バージョン 2 のパフォーマンスはバージョン 1 の 2 倍の速さです。
  • ユーザー インターフェイスが向上しました。
  • クライアント コンピュータの再起動が頻繁に必要となる原因になっていたメモリ リークが修正されました。
  • 抽出したタイム ゾーンをオペレーティング システムのタイム ゾーンに対応付けるアルゴリズムの機能が強化されました。

Exchange ツール実行時のリスクと制限

Exchange ツールを実行する前に検討が必要な問題が 2 点あります。それらの問題点、IT インフラストラクチャとユーザーに対する影響、およびその軽減策を以下の表に示します。
元に戻す全体を表示する
リスク 影響内容 軽減策
会議への更新が多数ある。 サーバーおよびネットワークのパフォーマンスが低下する。 少数のユーザーだけを対象とした更新処理を最初に行うことで、サーバーおよびネットワークのパフォーマンスへの影響の可能性を判断します。負荷が過大になる場合、ピーク時以外の時間帯やメンテナンス専用時間帯にツールを実行します。
ツールの実行に時間がかかり過ぎる。 MSXTMZ.exe はシングル スレッドです。このファイルを Update モードで数千人のユーザーに対して同時に実行すると、Exchange ツールの処理が終了するまで数時間、場合によっては数日かかることがあります。 すべてのメールボックスの更新処理を高速化するには、ユーザーを複数のバッチに分割し、別々のコンピュータで MSXTMZ.exe のインスタンスをそれぞれ実行して更新します。

メールボックス更新のオプション

DST 2007 タイム ゾーン規則を使用するようにユーザーのメールボックスを更新できる 5 つのオプションを以下の表に示します。
元に戻す全体を表示する
オプション 長所 短所
Outlook ツールを各ユーザーに配布し、ユーザーに各自のメールボックスを更新するように指示する。 Exchange ツールの実行に伴うリスクや制限を回避できます。 すべてのユーザーが Outlook ツールを正しい方法、正しいタイミングで実行することを保証するのは困難です。Outlook をインストールしていないユーザーは Outlook ツールを実行できません。ユーザーの混乱を低減するための追加的な教育が必要です。
影響を受けるすべてのユーザーとサーバーに対して Exchange ツールを実行する。 ユーザーに切り替えを意識させずに処理できます。 Exchange ツールの実行に関連する問題があります。前出の表を参照してください。
Exchange ツールを実行して、定期的な予定のみを更新する。単独の予定は、ユーザー側で個別に Outlook ツールを使用して更新するよう指示する。 単独の予定が正しく更新されない場合のリスクを低減できます。 Outlook ツールを実行する場合の短所と Exchange ツールを実行する場合の短所の両方が伴います。
Exchange ツールも Outlook ツールも実行せず、予定表を調べ、必要に応じて予定を再スケジュールするようユーザーに依頼する。 Exchange ツールの実行に伴う問題を回避できます。 影響を受けるすべての予定を全ユーザーが再スケジュールしない限り、DST の延長期間の間、1 時間遅れた予定表アイテムが残ります。ユーザーの混乱を低減するための追加的な教育が必要です。
Outlook ツールを各ユーザーに配布し、ユーザー側で各自のメールボックスを更新するように指示する。その後、Exchange ツールの Time Zone Extraction モードを使用して、ユーザーが Outlook ツールを実行しているかどうかを確認し、ユーザーが Outlook ツールを実行していない場合は、管理者が Exchange ツールを実行する。 ユーザーがツールを正しいタイミングで実行しないことによるリスクを低減し、Exchange ツール実行に伴う問題も回避できます。 ユーザーが Outlook 2007 を実行している場合は、このオプションは使用しません。

Exchange ツールのインストール方法

Exchange 予定表更新ツールは、自己解凍形式の実行可能ファイル Msextmz.exe として用意されています。

インストール後、インストール ディレクトリには次のファイルが格納されています。
  • Msextmz.exe
  • Msextmzcfg.exe
  • Msextmz.ini

    Msextmz.exe で使用されるすべてのパラメータについて説明するマスター .ini ファイルです。
  • Msextmzcfg.xml

    Outlook、CDO、および Outlook Web Access のタイム ゾーンをオペレーティング システムのタイム ゾーンにマップするタイム ゾーン マッピング ファイルです。
下記のファイルは、「Microsoft ダウンロード センター」からダウンロードできます。
元に戻す画像を拡大する
ダウンロード
Microsoft Exchange 予定表更新ツール パッケージ

Exchange 予定表更新ツールのインストールおよび使用に役立つように、仮想コンピュータが作成されました。仮想コンピュータは、Microsoft Windows Server 2003、Microsoft Office Outlook 2007、Microsoft Office Excel 2007、および Microsoft Office Word 2007 に基づいています。仮想コンピュータは、Virtual PC 2004 および Virtual Server 2005 R2 の両方で機能します。

Microsoft Exchange 予定表更新ツール用の仮想コンピュータの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
933185 Exchange 組織での DST 2007 予定表更新プログラムの展開に役立つ仮想コンピュータについて
マイクロソフトのサポート ファイルをダウンロードする方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
119591 オンライン サービスからマイクロソフトのサポート ファイルを入手する方法
マイクロソフトでは、アップロード時点の最新のウイルス検査プログラムを使用して、配布ファイルのウイルス チェックを行っています。配布ファイルはセキュリティで保護されたサーバー上に置かれており、権限のない第三者が無断でファイルを変更できないようになっています。

Exchange ツールでサポートされる言語

Exchange ツールは英語版のみが利用可能です。このツールは英語 (米国) 版のコンピュータでのみ実行できます。

Exchange ツールと互換性のある Exchange Server のバージョン

Exchange ツールは、以下のバージョンの Exchange Server のメールボックスを更新できます。
  • Microsoft Exchange Server 2007 Enterprise Edition
  • Microsoft Exchange Server 2007
  • Microsoft Exchange Server 2007 Standard Edition
  • Microsoft Exchange Server 2003
  • Microsoft Exchange Server 2003 Enterprise Edition
  • Microsoft Exchange 2000 Server
  • Microsoft Exchange Server 2003 Standard Edition
  • Microsoft Exchange 2000 Server Enterprise Edition
  • Microsoft Exchange 2000 Server Standard Edition

Exchange ツールでサポートされるオペレーティング システム

Exchange ツールは、以下のオペレーティング システム上で実行できます。
  • Microsoft Windows Server 2003
  • Microsoft Windows XP
  • Microsoft Windows 2000
Windows Vista はサポートされていません。

Exchange ツール実行前の準備

更新プログラムのインストール

Exchange ツールを実行する前に、クライアント コンピュータとサーバー コンピュータが、次の更新プログラムで正しく更新されていることを確認してください。
  1. Windows DST 更新プログラムをクライアント コンピュータとサーバー コンピュータにインストールします。 Windows オペレーティング システム ソフトウェアを実行しているコンピュータを更新する方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
    931836 Microsoft Windows オペレーティング システム用の 2007 年 2 月の累積的なタイム ゾーン更新プログラム
  2. Exchange 2003 SP2 の場合は、次のうち、各組織に適した更新プログラムをインストールします。
    • 911829 Outlook Web Access で、編集作業時にエラー メッセージが表示される、または作成フレームをクリックして有効にする必要がある
    • 924334 Exchange Server 2003 で Internet Explorer 7.0 および S/MIME コントロールを Outlook Web Access クライアント上にインストールした後にメッセージの作成フォームが応答を停止する
    : この手順は、手順 1. と同時に実行できます。

システム要件の確認

Exchange ツールは、Microsoft Office Outlook 2003 または Microsoft Office Outlook 2007 がインストールされ、Outlook 用タイム ゾーン データ更新ツールがインストールされたコンピュータで実行する必要があります。また、Microsoft .NET Framework 2.0 がクライアント コンピュータにインストールされている必要があります。

Outlook および Microsoft Office Outlook 用タイム ゾーン データ更新ツールは、Exchange ツール ダウンロード パッケージには含まれていません。別途インストールする必要があります。

: Tzmove.exe という名前の Outlook ツール インストーラ パッケージを、同じく Tzmove.exe という名前の実際の Outlook ツール実行可能ファイルと混同しないでください。

Exchange ツールを正常に実行するには、PickLogonProfile 値がコンピュータに設定されていないことが必要です。または、このレジストリ値が 0 (ゼロ) に設定されている必要があります。このレジストリ値が存在するかどうかを確認するには、次の手順を実行します。

警告 : レジストリ エディタまたは別の方法を使用してレジストリを誤って変更すると、深刻な問題が発生することがあります。最悪の場合、オペレーティング システムの再インストールが必要になることがあります。マイクロソフトは、レジストリの変更により発生した問題に関しては、一切責任を負わないものとします。レジストリの変更は、自己の責任において行ってください。
  1. [Start] ボタンをクリックし、[Run] をクリックします。regedit と入力し、[OK] をクリックします。
  2. 次のサブキーを展開します。
    HKEY_CURRENT_USER\Software\Microsoft\Exchange\client\options\
  3. [options] をクリックし、[PickLogonProfile] 値が存在するかどうかを確認します。[PickLogonProfile] 値が存在し、その値が 1 に設定されている場合は、値を 0 (ゼロ) に設定します。これを行うには、次の手順を実行します。
    1. [PickLogonProfile] を右クリックし、[Modify] をクリックします。
    2. [Value data] ボックスに 0 と入力し、[OK] をクリックします。
Exchange ツールは、Exchange Server または Exchange システム管理ツールを実行しているコンピュータでは実行できません。Exchange Server または Exchange システム管理ツールを実行しているコンピュータに Exchange ツールをインストールすると、次のエラー メッセージが表示されます。
Microsoft Exchange Calendar Update Tool cannot be installed with Microsoft Exchange.

Msextmz.exe を手動で構成して実行する方法

Msextmz.ini ファイルの構成

Msextmz.exe を正しく実行するには、Msextmz.ini ファイルを正しく構成する必要があります。Msextmz.ini ファイルは、ファイル内のコメントをよく読んでから変更することをお勧めします。

Msextmz.exe の実行モードの指定

Msextmz.exe には 2 つの実行モードがあります。実行モードを指定するには、Msextmz.ini ファイルで特定のパラメータを設定する必要があります。次の一覧で、2 つのモードについて、また Msextmz.ini ファイルでモードを構成する方法について説明します。
  • Time Zone Extraction (タイム ゾーン抽出)

    このモードでは、Msextmz.exe で、一連の MAPI プロパティを読み取ることによって各メールボックスからタイム ゾーン情報を抽出します。

    Msextmz.exe では、ユーザーが自分の予定表で設定した定期的な予定を調べ、そのユーザーのタイム ゾーンを特定できます。ただし、このオプションはリソースに負荷がかかります。そのため、デフォルトでは、このオプションは無効になっています。このオプションを有効にするには、Msextmz.ini ファイルで ReadCalendarTimezones パラメータを設定します。

    Msextmz.exe では、各ユーザーのタイム ゾーン情報が、メールボックスの従来の DN の一覧を含む出力ファイルに記録されます。各メールボックスの従来の DN には、次の種類のタイム ゾーン値があります。
    • Outlook Web Access Time Zone
    • CDO Time Zone
    • Outlook Time Zone
    • Recurring Meeting Time Zone
    ファイルの形式は次のとおりです。
    User_DN<\TAB>CDO_Time_Zone<\TAB>Outlook Web Access_Time_Zone<\TAB>Outlook_Time_Zone<\TAB>Recurring_Meeting_Time_Zone<\CRLF>
    Msextmz.exe で、上記の 4 種類のどのタイム ゾーン情報も抽出できない場合は、メールボックスの従来の DN がエラー ファイルにログ出力されます。

    ユーザーを 1 つのタイム ゾーンだけにマップするには、この出力ファイルを Microsoft Excel にインポートする必要があります。Excel で、そのタイム ゾーンのうちの 1 つを使用してユーザー一覧のフィルタ処理を行います。使用するタイム ゾーンは、使用している環境によって異なります。

    たとえば、多くのユーザーが BlackBerry のデバイス、Exchange 5.5 Outlook Web Access、 またはその他の CDO ベースのソリューションを使用している場合は、CDO Time Zone を使用して一覧をフィルタ処理します。多くのユーザーが Exchange Outlook Web Access を使用している場合は、Outlook Web Access Time Zone を使用して一覧をフィルタ処理します。多くのユーザーがこれらのいずれの場合にも該当しない場合は、Recurring Meeting Time Zone を使用して一覧をフィルタ処理します。

    ツールを Time Zone Extraction モードで実行するには、.ini ファイルを次のように構成します。
    • CommandLine パラメータはコメントを解除したままにします。
    • OutputFile パラメータを設定します。
    • ErrorFile パラメータを設定します。
    • ServerDN パラメータを設定します。
    • Profile パラメータを設定します。
    • LogFile パラメータを設定します。
    • ExportTimezones パラメータを 1 に設定します。
    • ini ファイル内の残りのパラメータをコメント アウトします。
  • Update (更新)

    このモードでは、Msextmz.exe によって、入力ファイルで指定したすべてのメールボックスが更新されます。入力ファイルの形式は次のとおりです。
    User_DN<\TAB>Server_Friendly_Name<\TAB>OS_Time Zone_Registry_Key<\CRLF>
    1 つのクライアントで実行可能な Msextmz.exe のインスタンスは 1 つだけですが、Msextmz.exe は複数のクライアントで同時に実行できます。

    Msextmz.exe をこのモードで実行するには、Msextmz.ini ファイルを次のように構成する必要があります。
    • CommandLine パラメータがコメント アウトされていないこと、および Tzmove.exe の正しい場所が設定されていることを確認します。
    • InputFile パラメータを設定します。
    • OutputFile パラメータをコメント アウトします。
    • ErrorFile パラメータを設定します。
    • ServerDN パラメータを設定します。
    • LogFile パラメータを設定します。
    • LogDirectory パラメータを設定します。
    • ExportTimezones パラメータをコメント アウトします。
    • 残りのパラメータのコメントを解除します。
    Update モードでは、Msextmz.exe で、複数の Exchange サーバーのユーザーを含む入力ファイルを受け入れることができます。.ini の設定では、任意の Exchange サーバーの DN を指定する必要があります。この場合に指定する必要があるのは、Exchange 組織内の Exchange サーバーのサーバー DN だけです。

    定期的な予定だけを更新するには、CommandLine パラメータを以下のように構成します。
    tzmove.exe /q /onlyrecurring
    定期的な予定と単独の予定の両方を更新するには、デフォルトの CommandLine 値を使用します。

Msextmz.exe のアクセス許可の構成

Msextmz.exe の実行に必要なアクセス許可は、使用する実行モードによって異なります。各実行モードで必要なアクセス許可は次の表のとおりです。
元に戻す全体を表示する
実行モード アクセス許可
Time Zone Extraction (タイム ゾーン抽出) Exchange View-Only Administrator
Msextmz.exe を実行しているコンピュータのローカル管理者
Update (更新) すべてのメールボックスに対して Full Mailbox Access および Send As の権限を持つドメイン ユーザー
Msextmz.exe を実行しているコンピュータのローカル管理者

"Grant Mailbox Permission (メールボックス アクセス許可付与)" スクリプト

GrantMailboxPermission.vbs スクリプトのコード例を使用して、すべてのメールボックスに対する Full Mailbox Access および Send As アクセス許可をドメイン ユーザーに付与することができます。

このスクリプトは、Exchange 2000 Server または Exchange Server 2003 を実行しているコンピュータ上の Exchange の管理者だけが実行できます。このスクリプトは、Exchange Server 2007 を実行しているコンピュータでは実行できませんが、Exchange Management Shell を使用して、必要なアクセス許可を付与することができます。

この VBS スクリプトのコードは「関連情報」に掲載されています。このスクリプトを実行する 2 つのモードについて、次の表で説明します。
元に戻す全体を表示する
モード コマンド ライン 説明
Add (追加) CScript GrantMailboxPermission.vbs ?add Domain_Name\User_Name File_Name 入力ファイル内の一覧にあるユーザーのメールボックスに対する Full Mailbox Access および Send As アクセス許可を Domain_Name\User_Name に付与します。入力ファイルは、改行コード (CRLF) で区切られたユーザーのメールボックスの従来の DN を含むテキスト ファイルであることが必要です。

スクリプトにより、GrantMailboxPermission.log ファイルが生成されます。このファイルは処理されたメールボックスを記録したものです。このログ ファイルの 1 行目は、アクセス許可を付与するユーザー (Domain_Name\User_Name) です。このファイルを削除しないでください。このファイルは Remove モードで使用されます。

明示的に "deny" アクセス許可をユーザーに割り当てると、スクリプトにより、情報が "GrantMailboxPermission.err" という名前のファイルに記録されます。スクリプトによってアクセス許可の付与または変更は行われません。

ユーザーが "deny" アクセス許可が割り当てられているセキュリティ グループのメンバである場合、このスクリプトにより Full Mailbox Access および Send As アクセス許可が付与されます。ただし、そのユーザーはそのメールボックスにログオンすることはできません。エラーはすべて GrantMailboxPermission.err ファイルに記録されます。
Remove (削除) CScript GrantMailboxPermission.vbs ?remove GrantMailboxPermission.log の一覧に含まれるメールボックスに対する Full Mailbox Access および Send As アクセス許可を、Domain_Name\User_Name から削除します。Domain_Name\User_Name は GrantMailboxPermission.log ファイルで指定されます。

: このスクリプトを Exchange Server を実行しているコンピュータで実行すると、ユーザーの処理が正常に行われた場合はスクリプトからピリオド (.) が返されます。ユーザーの処理が正常に行われなかった場合は、感嘆符 (!) が返されます。

: Time Zone Extraction モードの出力ファイルは、このスクリプトの入力ファイルとしては使用できません。このスクリプトの入力ファイルを作成するには、Time Zone Extraction 出力ファイルの内容をメモ帳に貼り付け、新規文書として保存し、その新規文書を入力ファイルとして使用します。

Update モードでのログ記録処理

Outlook 用タイム ゾーン データ更新ツールで出力されるログ

Outlook ツールを実行すると、temp ディレクトリにログ ファイルが作成されます。このファイルの名前は "Outlook Time Zone Update.log" です。Msextmz.exe によって、"Outlook Time Zone Update.log" ファイルから情報が抽出され、.ini ファイルの LogDirectory で指定されているディレクトリに、ユーザーごとのログ ファイルが作成されます。

これらのファイルは、以下の形式で命名されます。
MSExTmz-User’s CN from the User DN-Random number.LOG
たとえば、Outlook ツールでは、以下のファイルにログを記録します。
MSExTmz-USER3-0x0131273E.LOG
以下の DN を持つユーザーを処理した場合、Outlook ツールによりログが記録されます。
/O=FIRST ORGANIZATION/OU=FIRST ADMINISTRATIVE GROUP/CN=RECIPIENTS/CN=USER3

エラー ファイル

Msextmz.exe で、どのメールボックスに対しても Outlook ツールを実行できない場合は、そのユーザーの DN がエラー ファイルにログとして記録されます。Outlook ツールが正常に実行された場合は、エラー ファイルにはログが記録されません。

ログ ファイル

Msextmz.ini ファイルで Log file オプションが構成されている場合、Msextmz.exe によってコマンド プロンプト ウィンドウに出力される情報は、指定したファイルにも出力されます。

Msextmzcfg.exe の実行方法

Msextmzcfg.exe では、タイム ゾーンの抽出、ユーザーごとのタイム ゾーンの解決、Msextmzcfg.exe を Update モードで実行するために必要なユーザー一覧および .ini ファイルの生成の処理が自動化されます。これらの手順は、手動ではなく、Msextmzcfg.exe を使用して実行することをお勧めします。ここでは、Msextmzcfg.exe の実行方法について説明します。

必要なアクセス許可

Msextmzcfg.exe を実行するアカウントには、クライアントに対して次のアクセス許可が必要です。
  • Exchange View-Only Admin
  • Local administrator

Msextmzcfg.exe を使用した Exchange サーバー更新処理の例

  1. クライアント コンピュータで、更新する Exchange サーバー上にあるメールボックスにログオンする Outlook プロファイルを作成します。プロファイルがオンライン モードであることを確認してから、このプロファイルをデフォルトのプロファイルとして構成します。

    : Exchange サーバーで Online モードがサポートされている必要があります。
  2. Msextmzcfg.exe を実行して Exchange ツールを起動します。
  3. Exchange Calendar Update Tool ウィザードの 1 ページ目で、以下の手順のいずれかを実行します。

    Exchange サーバー上の全メールボックスのタイム ゾーンを抽出するには、次の手順を実行します。
    1. [Server Name] ボックスに、Exchange サーバーのフレンドリ名または完全修飾ドメイン名 (FQDN) を入力します。フレンドリ名に "." が含まれている場合は、代わりに NetBIOS 名を使用します。サーバーが別の Active Directory フォレスト内にある場合、Msextmzcfg.exe は正常に実行されません。
    2. [Output File From Extraction] ボックスに、すべてのメールボックスのタイム ゾーン情報を含むファイルの名前を入力します。
    3. 定期的な会議に対するタイム ゾーンを抽出する場合は、[Extract Recurring Meeting Time Zones] チェック ボックスをオンにします。

      重要 : この設定を使用すると抽出モードの実行時間が著しく増加します。デフォルトでは、[Extract Recurring Meeting Time Zones] チェック ボックスはオフになっています。
    4. [Outlook Profile Name] 一覧をクリックして、手順 1. で作成したプロファイルをクリックします。
    5. [Next] をクリックします。


    タイム ゾーンの抽出を省略するには、次の手順を実行します。
    1. [Skip time zone extraction] チェック ボックスをオンにします。デフォルトでは、[Skip time zone extraction] チェック ボックスはオフになっています。
    2. [Output File From Extraction] ボックスに、前回タイム ゾーン抽出を実行した際の出力ファイルの名前を入力します。
    3. [Server Name] ボックスに、手順 3b. で指定した出力ファイルの生成に使用した Exchange サーバーのフレンドリ名または FQDN を入力します。
    4. [Next] をクリックします。
  4. タイム ゾーンの抽出が完了すると、Msextmzcfg.exe によって出力ファイルが解析され、ユーザーのメールボックスのタイム ゾーンを実際のオペレーティング システムのタイム ゾーンにマップする処理が行われます。

    一致するタイム ゾーンがない場合、[Map Time Zone] ページで手動でタイム ゾーンをマップする必要があります。手動でマップするには、[Windows Time Zone] のボックスの一覧でユーザーのタイム ゾーンと一致する Windows のタイム ゾーンをクリックし、[Next] をクリックします。
  5. マップ処理が完了すると、Msextmzcfg.exe によってユーザーが次のグループに分類されます。
    • タイム ゾーンを 1 つだけ持つユーザー (CDO、Outlook Web Access、Outlook、または Recurring Meeting タイム ゾーンなど)、または、1 つのオペレーティング システム タイム ゾーンにマップされる複数のタイム ゾーンを持つユーザー
    • 複数のオペレーティング システム タイム ゾーンにマップされる複数のタイム ゾーンを持つユーザー
    • タイム ゾーンを持たないユーザー
    Msextmzcfg.exe を使用すると、"conflicted (競合する)" ユーザーと "nonexistent (存在しない)" ユーザーの一覧を別々のテキスト ファイルに保存できます。これを行うには、次の手順を実行します。
    1. [Users with conflicting time zone information] 領域の [Output File] ボックスに ConflictUsers.txt と入力します。
    2. [Users with no time zone information] 領域の [Output File] ボックスに NonExistent.txt と入力します。
  6. [Calendar update configuration] ページで、メールボックスの更新で使用するユーザー一覧入力ファイル、.ini ファイル、およびバッチファイルの生成に必要な情報を指定します。これを行うには、次の手順を実行します。
    1. [Select time zones that need to be updated] の一覧で、更新するタイム ゾーンに対応するチェック ボックスをオンにします。
    2. [Number of Batch Files] ボックスに、生成するバッチ ファイル数を入力します。

      この情報は、更新の実行時間を短縮する場合に便利です。多数のユーザーを小規模なバッチに分割して、Msextmz.exe の複数のインスタンスを Update モードで実行します。この処理は別々のコンピュータで行い、Msextmz.exe のインスタンスごとに別々のユーザーのバッチを処理します。

      : 1 台のクライアント コンピュータで Msextmz.exe のインスタンスを複数実行することはできません。
    3. [Tzmove.exe path] ボックスに、Outlook ツールとパラメータのパスを入力します。定期的な会議だけを更新する場合は、[Recurring meetings only] チェック ボックスをオンにします。
    4. [Post Mailbox Delay (seconds)] ボックスに、メールボックスの更新と更新の間にプロファイルを作成する際の遅延時間を秒単位で入力します。デフォルト値の 0 秒を使用することをお勧めします。
    5. [Per Mailbox Timeout (minutes)] ボックスに、Outlook ツールがタイムアウトするまでの時間を分単位で入力します。デフォルトの 15 分を使用することを推奨します。
  7. [Finish] をクリックします。Msextmzcfg.exe によって、現在の実行ディレクトリの下にサブディレクトリが生成されます。サブディレクトリの名前は、Exchange サーバーのフレンドリ名です。サブディレクトリには次のファイルが格納されています。
    • MSExTmz_x.ini

      Msextmz.exe を Update モードで実行する場合に使用する .ini ファイルです。x は、バッチ番号のプレースホルダです。
    • Mailboxes_x.txt

      Msextmzcfg.exe を Update モードで実行する場合に使用するユーザー一覧入力ファイルです。x は、バッチ番号のプレースホルダです。
    • MSExTmz_x.bat

      Mailboxes_x.txt ファイルで指定されているユーザーに対して Msextmzcfg.exe を Update モードで実行するバッチ ファイルです。
    • NonExistent.txt

      メールボックスにタイム ゾーン情報がないユーザーの一覧が含まれます。
    • ConflictUsers.txt

      タイム ゾーンが競合しているユーザーの一覧が含まれます。
  8. サーバーの名前が付けられているサブディレクトリを探し、Mailboxes_x.txt ファイルをメモ帳で開き、リソースまたはシステムのメールボックス エントリを削除し、Mailboxes_x.txt ファイルを保存します。
  9. 次の手順を実行します。
    1. Outlook を起動します。プロファイルを選択するように求めるメッセージが表示されず、デフォルトのプロファイルを使用して正常にサーバーにログオンできることを確認します。
    2. Outlook の起動時に確認のメッセージが表示されないことを確認します。メッセージが表示される場合は、Msextmz.exe を実行できません。
    3. 以下のファイルが存在しないことを確認します。
      %USERPROFILE%\Local Settings\Application Data\Microsoft\Outlook\Extend.dat
      このファイルが存在する場合は、名前を変更します。
    サーバー名が付いたサブディレクトリに移動し、バッチ ファイルを 1 つずつ実行してメールボックスを更新します。バッチ ファイルを正しく実行するには、更新するメールボックスに対する Full Mailbox Access および Send As アクセス許可があるアカウントを使用する必要があります。

Exchange ツール実行後の処理

更新プログラムのインストール

現在の環境にあるすべての Exchange サーバーを更新した後、次の更新プログラムを Exchange サーバーにインストールします。
926666 Exchange 2003 Service Pack 2 の 2007 年夏時間変更の更新プログラム

既知の問題

  • Outlook Web Access で作成した定期的な会議が Exchange ツールで更新されない

    「サポート技術情報」 (Microsoft Knowledge Base) の資料 926666 に記載されている更新プログラムを Exchange サーバーにインストールしてからメールボックスを更新した場合、Outlook Web Access で作成した定期的な会議は Exchange ツールで更新されません。この問題を解決するには、Exchange サーバーで、更新プログラム 926666 を削除し、Exchange ツールを実行してから、更新プログラム 926666 を再インストールします。
  • Exchange ツールの実行後に Exchange 2007 を再起動する必要がある

    Exchange ツールの実行後に Exchange 2007 Outlook Web Access で予定表アイテムを正しく表示するには、Exchange サービスを再起動する必要があります。
  • Exchange ツールをインストールできない

    以下のレジストリ キーのいずれかが存在すると、Exchange ツールは正しくインストールされません。
    • HKEY_CLASS_ROOT\Outlook.Application.9
    • HKEY_CLASS_ROOT\Outlook.Application.10
    この場合、Exchange ツールをインストールしようとすると、以下のエラー メッセージが表示されます。
    Exchange Server Calendar Rebasing Tool cannot be installed with this version of Microsoft Outlook.
    この問題を回避するには、これらのレジストリ キーを削除し、Exchange ツールをインストールします。その後、レジストリ キーを復元します。
  • タイム ゾーンが両義的である

    Outlook 2003 以前のバージョンの Outlook で、太平洋標準時 (PST) タイム ゾーンで DST 2006 規則を使用して作成された定期的な予定表アイテムは、Outlook ツールで更新されません。この問題は、Outlook ツールを実行する Msextmz.exe に影響します。

    この問題を回避するには、レジストリを変更して、Msextmz.exe を実行しているコンピュータからメキシコのタイム ゾーンを削除します。Msextmzcfg.exe を Update モードで実行し、その後レジストリでメキシコのタイム ゾーンを復元します。これを行うには、次の手順を実行します。

    警告 : レジストリ エディタまたは別の方法を使用してレジストリを誤って変更すると、深刻な問題が発生することがあります。最悪の場合、オペレーティング システムの再インストールが必要になることがあります。マイクロソフトは、レジストリの変更により発生した問題に関しては、一切責任を負わないものとします。レジストリの変更は、自己の責任において行ってください。
    1. レジストリをバックアップします。
    2. [Start] ボタンをクリックし、[Run] をクリックします。regedit と入力し、[OK] をクリックします。
    3. 次のサブキーを展開します。
      HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones
    4. [Mexico Standard Time] を右クリックし、[Delete] をクリックします。
    5. [Confirm Key Delete] ダイアログ ボックスで、[Yes] をクリックします。
    6. [Mexico Standard Time 2] を右クリックし、[Delete] をクリックします。
    7. [Confirm Key Delete] ダイアログ ボックスで、[Yes] をクリックします。
    8. Msextmzcfg.exe を Update モードで実行します。
    9. 手順 1. で作成したバックアップからレジストリを復元します。
    レジストリのバックアップ方法および復元方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
    256986 Microsoft Windows レジストリの説明
  • サーバー 1 台あたりの処理可能なメールボックスの数に制限がある

    User List モードおよび Time Zone Extraction モードでは、Msextmz.exe で処理できるメールボックスはサーバー 1 台あたり 65,535 個だけです。65,535 個を超えるメールボックスがあるサーバーでは、一部のメールボックスが処理されません。
  • 会議室の割り当てが競合する場合がある

    Outlook ツールを使用すると会議は正しい時刻に移動されますが、これにより会議室の割り当てが競合する場合があります。

    Exchange Server 2007 を実行している場合は、Exchange 2007 の Resource Booking Attendant の競合の制限を 3 に設定することを推奨します。すべてのメールボックスを更新すると、この競合は自動的に解決されます。

    直接予約または自動承諾エージェントを使用している場合は、次の手順を実行してリソース メールボックスを更新します。

    直接予約の場合

    : 次の手順を実行するには、Microsoft Office Outlook 用タイム ゾーン データ更新ツール (Tzmove.exe) の最新の修正プログラムをダウンロードする必要があります。
    1. Tzmove.exe (Outlook ツール) を、コマンド ライン パラメータ /FORCEREBASESUPPRESSALLUPDATES を指定して、リソース メールボックスに対して実行します。
    2. Tzmove.exe を通常のモードで、その他すべてのメールボックスに対して実行します。
    更新完了後、Outlook を使用してリソース メールボックスにログオンし、手順 2. で送信した更新を開封すると、これらの会議の更新は、リソース メールボックスの予定表に "仮の予定" として表示されます。リソース メールボックスにだれもログオンしない場合、手順 1. で更新された元の会議出席依頼は、リソース メールボックスの予定表に "承諾" と表示されます。

    FORCEREBASESUPPRESSALLUPDATES の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
    933146 Microsoft Office Outlook 用タイム ゾーン データ更新ツールの修正プログラム パッケージについて


    自動承諾エージェントの場合
    1. サーバー上で自動承諾エージェントが実行されていることを確認します。
    2. 夏時間更新プログラムをクライアント コンピュータにインストールします。
    3. Tzmove.exe (Outlook ツール) を、コマンド ライン パラメータ /FORCEREBASESUPPRESSALLUPDATES を指定して、自動承諾エージェントが有効になっているリソース メールボックスに対して実行します。
    4. 自動承諾エージェントが実行されていることを再度確認します。更新された会議の承諾メールを主催者が受信できるようにするために、この再確認をしておくことが重要です。
    5. Tzmove.exe を通常のモードで、その他すべてのメールボックスに対して実行します。
  • パブリック フォルダの予定表

    Exchange ツールでは、パブリック フォルダの予定表は更新されません。パブリック フォルダの予定表の更新方法については、Outlook ツールのドキュメントを参照してください。
  • "Run As" をコマンド ラインで使用する必要がある

    コマンド ラインで "Run As" を使用して Msextmz.exe を実行する場合は、"Run As" を使用して、レジストリで PickLogonProfile 値を設定するようにレジストリ エディタを構成する必要があります。
  • Msextmz.exe が応答を停止する場合がある

    グローバル カタログ サーバーに問題があると、Msextmz.exe が応答を停止する場合があります。その場合は、次の手順を実行します。
    1. Msextmz.exe を停止します。
    2. Msextmz.ini で Logfile パラメータが設定されていた場合は、どのメールボックスが処理されていたかを確認します。ログ ファイル内の [Processing Mailbox] エントリに、Msextmz.exe が応答を停止したときに処理されていたメールボックスのユーザー DN が表示されます。

      Msextmz.ini で Logfile パラメータが設定されていなかった場合、Processing Mailbox 情報はコマンド プロンプト ウィンドウに表示されます。

      Msextmz.exe が応答を停止したときに処理されていたメールボックスより後のユーザー メールボックスは、すべて処理されません。これは、Msextmz.exe 実行時に入力ファイルとして使用した ServerName_TimeZone_Input_File.txt 内のメールボックスについても同様です。
    3. 処理されなかったメールボックスのユーザーの DN を含む入力ファイルを新規作成します。
    4. この新しい入力ファイルを使用して Msextmz.exe を再度実行する前に、前回の実行で生成されたエラー ファイル内のユーザーを必ず処理してください。
  • Outlook ツールと Exchange ツールを同じ環境で実行できる

    Outlook ツールと Exchange ツールは同じ環境で実行できます。Outlook ツールで更新済みのメールボックスに対して Exchange ツールを実行した場合 (またはその逆を行った場合)、副作用はありません。ただし、管理者が Exchange ツールを実行した場合は、ユーザーが別途 Outlook ツールを実行する必要はありません。
  • 指定した時刻より遅れてアラームが表示される

    Exchange ツールで更新されたメールボックスの会議以外のアラームは、Outlook をオンライン モードでメールボックスに接続したことがない場合には、更新されません。この場合、アラームは指定した時刻より 1 時間遅れて表示されます。

    Outlook をオンライン モードで接続したことがない場合は、Outlook タイム ゾーン更新ツールで見つかった予定の誤ったアラームを調整する必要があります。Outlook をオンライン モードで接続したことがない場合、メールボックス内にアラーム検索フォルダは存在しません。そのため、電子メール アイテム、連絡先、その他のアラームは更新されません。たとえば、後日フォロー アップするための電子メール アイテムのアラームや、アラームが設定されている仕事アイテムのアラームは更新されません。
  • 実行時間が長すぎる

    Msextmz.exe はシングル スレッドです。したがって、多数のメールボックスに対してツールを実行すると、何時間もかかる場合があります。

    参考までに、マイクロソフトの IT 部門では、およそ 53,000 個のメールボックスを更新するのに、9 台のクライアントを使用して 16 時間かかりました。これは、1 クライアントあたり 1 分につき 6.13 個のメールボックスが更新される速度に相当します。

    会議出席依頼内の出席者の数は、Update モードでの実行時間には影響を与えません。これは、クライアント側から見れば、会議の更新を 1 人の受信者に送信する場合と 100 人の受信者に送信する場合とで、所要時間は同じであるためです。

    出席者の数は会議の更新のコピー数には影響を与えます。ただし、これはメール フローの問題であり、実行時間の問題ではありません。
  • 多数のメールボックスを更新後にイベント ログが容量不足になる

    Tzmove.exe では、更新が成功するたびに、ソースの TZMOVE EventID 32 を含む情報イベントが生成されます。イベント数が多いと、アプリケーション ログがディスク上で割り当てられている容量を超過する場合があります。Update モードの Msextmz.exe では、これらのイベントを基に、Tzmove.exe が正常に実行されたことを判断します。Msextmz.exe で、更新対象のメールボックスに関連付けられている、対応する Tzmove.exe イベントが見つからない場合、Msextmz.exe では更新が失敗したと見なされます。したがって、error.txt ファイルにメールボックスの DN がログ出力されます。この問題を回避するために、イベント ログのサイズを最大に設定し、上書きを許可することをお勧めします。
  • "Unable to install because previous versions of "Microsoft Exchange Calendar Update Tool" were detected. Please uninstall them and run this setup again." が表示される

    Exchange Calendar Update Tool バージョン 1.0 を以前にインストールしている場合は、バージョン 1.0 をアンインストールしてからバージョン 2.0 をインストールする必要があります。バージョン 1.0 は、自己解凍形式の実行可能プログラムとして提供され、Msextmz.msi と Msextmzcfg.msi の 2 つの MSI パッケージが含まれていました。両方のパッケージをアンインストールしてからバージョン 2.0 をインストールする必要があります。バージョン 2.0 のインストールで依然として問題が発生する場合は、プログラムの追加と削除ツールではなく *.msi パッケージを使用して、バージョン 1.0 を再インストールし、アンインストールしてから、コンピュータを再起動し、バージョン 2.0 をインストールします。どの方法でも失敗する場合は、*.msi パッケージからバイナリを直接抽出します。

エラー メッセージと解決方法

  • Unable find mailbox timezone:Error 0x80004005
    このエラー メッセージは、次のいずれかの問題が原因で表示される場合があります。
    • 特定のユーザーのメールボックスにタイム ゾーンの値が見つかりませんでした。この問題を解決するには、"ReadCalendarTimeZones=1" (引用符は含みません) を Msextmz.ini ファイルに追加して、定期的な予定表アイテムでタイム ゾーン情報の有無が確認されるようにします。前回の実行時に生成されたエラー ログの DN を使用して新しい入力ファイルを作成できます。
    • 誤ったディレクトリの Tzmove.exe を参照しています。この問題を解決するには、ダウンロードしたインストール ファイルを Msextmz が存在するフォルダに抽出するか、Tzmove.exe がインストールされているワークステーション上の場所への完全なパスを入力して Msextmz.ini ファイルを更新します。

      : Microsoft Office Outlook 用のタイム ゾーン データ更新ツールをダウンロードした場合、Tzmove.exe ファイルは、実際のツールのインストーラです。インストーラを参照すると、Msextmz を実行するときにエラーが発生します。
    • Msextmz の実行に使用しているアカウントに、メールボックスに対する完全なアクセス許可がなく、また Exchange の適切なアクセス許可が委任されていません。この問題を解決するには、Exchange Server コンピュータから "Grant Mailbox Permission (メールボックス アクセス許可付与)" スクリプトを実行します。
  • Unable to process mailbox /O=CONTOSO/OU=FIRST ADMINISTRATIVE GROUP/CN=RECIPIENTS/CN=TESTMB01 - 0x80004005
    legacyExchangeDN を慎重に確認して、必要な修正を行います。値を正確に入力できるように、ADSIEdit を使用して、値をコピーして貼り付けます。
  • Unable open mailbox table for server /O=CompanyRoot/ OU=IT/cn=Configuration/cn=Servers/cn=EXCH01. Error 80040115
    これは RPC エラーです。legacyExchangeDN を慎重に確認して、必要な修正を行います。
    Please Select the Valid Server
    サーバーの識別名 (DN) が必要です。DN は次のような形式です。
    ServerDN:/O=CompanyRoot/OU=IT/cn=Configuration/cn=Servers/cn=EXCH01
  • The application failed to initialize properly (0xc0000135). Click on OK to terminate the application
    このエラー メッセージは、.NET Framework 2.0 がインストールされていない場合に表示されます。
  • HrTestMailboxAccess:Unable Open mailbox - 0x8004011D.
    更新処理中にこのエラー メッセージが表示される場合は、使用しているアカウントに、メールボックスに対する完全なアクセス許可がありません。ツールでメールボックスを更新するには、すべてのメールボックスに対する Full Mailbox Access のアクセス許可が必要です。

    「Msextmz.exe のアクセス許可の構成」に記載されている方法を使用して、適切なアクセス許可が付与されていることを確認します。

関連情報

"Grant Mailbox Permission (メールボックス アクセス許可付与)" スクリプト

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

改訂

元に戻す全体を表示する
バージョン日付変更
1.0 2007/1/11 オリジナル バージョン
2.0 2007/1/12 編集上の変更
3.0 2007/2/7 資料の完全な書き直し
3.1 2007/2/8 ダウンロード センターの URL を更新
3.2 2007/2/8 編集上の変更
4.0 2007/2/9 会議室の競合に関する新情報を追加
4.1 2007/2/12 「対象製品」に Exchange 2003 Enterprise Edition を追加
4.2 2007/2/12 誤植を修正
4.3 2007/2/12 注の手順番号を修正
5.0 2007/2/13 「Exchange ツールのインストール方法」に仮想コンピュータの情報を追加
6.0 2007/2/15 「指定した時刻より遅れてアラームが表示される」の書き直し
7.0 2007/2/15 Microsoft Exchange 予定表更新ツール用の仮想コンピュータ パッケージのダウンロード情報を追加
8.0 2007/2/16 「Exchange ツール実行前の準備」に Exchange システム管理ツールに関する情報を追加
8.1 2007/2/19 「Msextmzcfg.exe の実行方法」のファイル名を修正
8.2 2007/2/20 「"Grant Mailbox Permission (メールボックス アクセス許可付与)" スクリプト」の User_Name と File_Name の間にスペースを追加
9.0 2007/2/20 資料の書き直し
10.0 2007/2/20 内部メタデータの更新
10.1 2007/2/20 誤植を修正
10.2 2007/2/20 誤植を修正
10.3 2007/2/20 誤植を修正
10.4 2007/2/21 誤植を修正
11.0 2007/2/22 Exchange ツール バージョン 2 に関する情報を追加
11.1 2007/2/22 誤植を修正
11.2 2007/2/23 資料の改訂を示す表を追加
12.0 2007/2/26 イベント ログの容量に関する情報を追加、エラー メッセージおよびその解決方法に関する情報を追加
13.0 2007/2/27 仮想コンピュータ情報のダウンロード用 URL を削除し、933185 の相互参照を追加
14.0 2007/2/28 「既知の問題」の最初の項目に KB926666 を含めるようにテキストを変更
15.0 2007/2/27 仮想コンピュータの情報を追加
16.0 2007/2/28 Microsoft Office Outlook 用タイム ゾーン データ更新ツール (Tzmove.exe) の最新の修正プログラムに関する情報を「直接予約の場合」に追加し、933146 の相互参照を追加
16.1 2007/2/28 表のタグを修正
17.0 2007/3/1 Exchange Server 5.5 の情報を削除
18.0 2007/3/5 改訂表の書き直し
19.0 2007/3/8 "HRTestMailboxAccess" エラー メッセージに関する情報を追加
19.1 2007/3/13 会議出席依頼内の出席者の数についての重複した段落を削除
19.2 2007/3/19 改訂表を更新

プロパティ

文書番号: 930879 - 最終更新日: 2007年11月26日 - リビジョン: 19.4
この資料は以下の製品について記述したものです。
  • 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 Enterprise Server
  • Microsoft Exchange 2000 Server Standard Edition
キーワード:?
kbhowto kbinfo kbexpertiseinter KB930879
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

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