スマホ向け表示

記事一覧

SYSVOL_DFSR 共有の復元方法

ファイル 221-1.jpg
 
せっかく再構築してDC に昇格させたのに、SYSVOL 共有ができてないとか…ポリシー自体は適用できるけど、IPSEC だけは適用できないから終わってるとしかいいようがないなぁ…。
 
 
-------------------------------------------- 
SYSVOL_DFSR 共有ができるように設定をする。
-------------------------------------------- 
   
ここでは以下の条件で設定。
***************************************************
 ドメイン名:nekoprint.local
 DC は全部で2台
  既存(正常)DC名:DC2 Windows Server 2008 R2
  新規作成したDC名:DC3 Windows Server 2012 R2
***************************************************
 
  
① cmd(管理者として実行) ※正常なDC 側で操作する
② Adsiedit
③ 「操作」-「接続」を選択し、以下の通りに設定したら「OK」
 名前
  分かりやすい名前を適当につける。デフォルトは、既定の名前付けコンテキスト
 接続ポイント
  【識別名または名前付けコンテキストを選択または入力する】を選択する。(1行として入力)
   CN=SYSVOL Subscription,CN=Domain System Volume,CN=DFSR-LocalSettings,CN=DC2,OU=Domain Controllers,DC=nekoprint,DC=local
 コンピュータ
  既定
 
ファイル 221-2.jpg 
 
  
④ 表示されたコンテナを右クリックし、プロパティをクリック
⑤ 以下の部分を設定変更し、「OK」
   msDFSR-Enabled TRUE -> FALSE
   msDFSR-Options 0 -> 1 (あとで自動的に0に戻る)
  
ファイル 221-3.jpg
 
 
しばらくすると、DFSR イベント ログに、イベントID:4114 が表示されるので確認しておく
 
------------------------------------------ 
ここからは、新規に追加したDC3側で操作
------------------------------------------ 
 
⑥ cmd(管理者として実行) 
⑦ Adsiedit
⑧ 「操作」-「接続」を選択し、以下の通りに設定したら「OK」
 名前
  分かりやすい名前を適当につける。デフォルトは、既定の名前付けコンテキスト
 接続ポイント
  【識別名または名前付けコンテキストを選択または入力する】を選択する。(1行として入力)
   CN=SYSVOL Subscription,CN=Domain System Volume,CN=DFSR-LocalSettings,CN=DC3,OU=Domain Controllers,DC=nekoprint,DC=local
 コンピュータ
  既定
 
ファイル 221-4.jpg 
  
 
⑨ 表示されたコンテナを右クリックし、プロパティをクリック
⑩ 以下の部分を設定変更し、「OK」
   msDFSR-Enabled TRUE -> FALSE
 
 
  
しばらくすると、DFSR イベント ログに、イベントID:4114 が表示されるので、そのイベントを確認してから次の操作を行う。
 
------------------------------------------ 
ここからは、正常動作している DC2 側で操作
------------------------------------------ 
 
⑪ dssite
   新規追加したDC に対して、レプリケーション元からレプリケーションを強制する。
 
    Sites
     Default-First-Site-Name 
      Servers  
       DC2
       DC3
        NTDS Settings ←こちらをクリックし、今すぐレプリケート
 
 
⑫ ⑤で行った変更を元に戻す。
   msDFSR-Enabled FALSE -> TRUE
 
⑬ 以下のコマンドを実行する。
   dfsrdiag pollad
 
 
しばらくすると、DC2 側のDFSR イベント ログに、イベントID:4602 が表示されるので、そのイベントを確認してから次の操作を行う。
 
------------------------------------------ 
ここからは、新規に追加したDC3側で操作
------------------------------------------ 
  
⑭ ⑩で行った変更を元に戻す。
   msDFSR-Enabled FALSE -> TRUE
 
⑮ sc stop dfsr & sc start dfsr
 
⑯ 以下のコマンドを実行する。
   dfsrdiag pollad
 
⑰ しばらくしてから以下のコマンドを実行し、SYSVOL 共有ができているかを確認する。※ここでは、DC3 で操作。
   net share
 
ファイル 221-5.jpg
 
※画像では、SYSVOL フォルダーになっていますが、DC に昇格させる際に保存先名を SYSVOL にしたためです。  
 
 
気づくといつのまにか新規追加したDC側でイベントID:2002、4614、6806、4604(2008R2側では、4602) と順に出ているのではなかろうか。最後の4604(4602)イベントが出ていれば成功であるが…
 

SMB v1 無効化 Windows Server 2012 R2, 8.1, 10 編

今後PowerShell だけになるんでしょうけど、あまり意味がないと思うんだけどね。
イタチごっこなんだからGUIなくしても無駄だとはよ気づいてほしいな。色々対策やってますアピールいらんから(笑) 
 
 
---------------------------------------------------
ダッシュボードでの SMBv1 削除方法(Windows Server 2012 R2)
--------------------------------------------------- 
① サーバーマネージャーを開く
 
② ダッシュボードから「役割と機能の追加」を選択
 
③ 役割と機能の追加ウィザードが開く。ここでは【役割と機能の削除ウィザード】をクリック
(ここで「次へ」はクリックしないこと。追加ウィザードになってしまうから。)
 
④ 役割と機能の削除についての説明が表示される。「次へ」をクリック
 
⑤ 役割と機能を削除するサーバーまたは仮想ハードディスクを選択し、「次へ」をクリック
 
⑥ SMBは【役割】ではないので「次へ」をクリックし、【機能の削除】ウィンドウへ移動する。
 
⑦ 機能一覧の中から【SMB 1.0/CIFS ファイル共有のサポート】のチェックを外し「次へ」をクリック
 
⑧ 「削除」をクリック
(必要に応じて対象サーバーを自動的に再起動する、にチェックを入れてから削除をクリックしてもいいけど私的には好きじゃない・・・笑)
  
ファイル 217-1.jpg
 
   
 
------------------------------------------------
PowerShell での SMBv1削除方法(Windows Server 2012 R2)
------------------------------------------------ 
① 現在のSMBv1 の状態を確認してみる
 Get-WindowsFeature FS-SMB1
 
② SMBv1 無効化のコマンド
 Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol
 
③ 現在のSMBv2 の状態を確認してみる
 Get-SmbServerConfiguration | Select EnableSMB2Protocol
 
 
 
有効であれば③までで完了だけど、SMBv2/v3 が無効の状態であれば有効にするため以下のコマンドを実行する
 Set-SmbServerConfiguration -EnableSMB2Protocol $true
 
 
 
 
---------------------------------------------------
プログラムと機能からの SMBv1 削除方法(Windows 8.1, 10 用)
--------------------------------------------------- 
① コマンド Appwiz.cpl
 
② プログラムと機能ウィンドウの左上に表示されている、【Windows の機能の有効化または無効化】をクリック
 
③ 機能一覧の中から【SMB 1.0/CIFS ファイル共有のサポート】のチェックを外し「OK」をクリック
 
④ 再起動する
 
ファイル 217-5.jpg
 
 
  
 
----------------------------------------------------
PowerShell での SMBv1 削除方法(Windows 8.1, 10 用)
---------------------------------------------------- 
① 現在のSMBv1 の状態を確認してみる
 Get-WindowsOptionalFeature –Online –FeatureName SMB1Protocol
   
② SMBv1 無効化のコマンド
 Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
  
③ 現在のSMBv2 の状態を確認してみる
 Get-SmbServerConfiguration | Select EnableSMB2Protocol
 
 
ファイル 217-2.jpg 
 
実はほとんどコマンドは 2012 R2 と同じ。
 
 
有効であれば③までで完了だけど、SMBv2/v3 が無効の状態であれば有効にするため以下のコマンドを実行する
 Set-SmbServerConfiguration –EnableSMB2Protocol $true
 
 
 
---------------------------------------------------- 
現在の状態の最終確認
Windows Server 2012 R2, Windows 8.1, 10 共通
---------------------------------------------------- 
上記それぞれで書いたコマンドをPowerShell にて実行後に表示される内容で、
SMB1Protocol のState(状態)が Disabled であるかどうか、
また、EnableSMB2Protocol と表示されたかどうか。  
 
ファイル 217-4.jpg
 
 
  
-----------------------------------------------------
以下は元の状態に戻したい人向けのコマンド。
Windows Server 2012 R2, Windows 8.1, Windows 10 共通
-----------------------------------------------------
いい言語に力を与えるには悪い言語も知らなきゃいけない。でも決して使うな、と昔おばあちゃんに言われ…てねーよ!笑
いつも思うのが、False がバルスに見える・・・
 
 
   
SMBv1 有効化のコマンド
 Enable-WindowsOptionalFeature -Online -FeatureName smb1protocol
 
SMBv2 無効化のコマンド
 Set-SmbServerConfiguration -EnableSMB2Protocol $false
 
 
 
 
 
グループ ポリシーでの変更方法は以下。 
https://www.nekoprint.jp/cgi-bin/nekonekodiary/archives/81.html 

SMB v1 無効化 Windows Server 2008, 2008 R2, Vista, 7 編

一度書き出すとどんどんややこしくなったのですこし噛み砕く。
Windows Server 2012 R2 と Windows 8.1 は別のところで書きます。 

ここでは、Server サービスと、Workstation サービスの設定をそれぞれ変更します。  
 
 
※事前にレジストリのバックアップをしましょう。
--------------------------
① SMB v1 サーバーの削除 
--------------------------
Server サービスの設定を変更します。ファイル サーバー側だと思ってください。
 
ただし、クライアント側にも管理共有があり、ファイルサーバーにもなりうるので注意。
 
ファイル サーバーが古いタイプのNAS などで SMBv2 対応していないなら設定しないほうがいい。
 
また、ドメイン環境次第ではサインイン(ログオン)等できなくなるので全てのPCで同じ設定を行うこと。 
 
 
 
【SMB サーバーを、レジストリ で操作する】
  
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
 
値の名前:SMB1 (手動で作成する)
値のデータ:0 (既定値は 1 で有効)
 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters 
 
値の名前:SMB2 (手動で作成する)
値のデータ:1 (既定値は 1 で有効)
 
 
ファイル 216-1.jpg 
  
変更後、一度再起動しておく。
再起動後、下のSMB クライアントの設定を行う。
 
 
 
----------------------------------
② SMB v2 クライアントの設定 
----------------------------------
WorkStation サービスの設定を変更します。
 
【SMB v1 クライアントを、コマンド プロンプトで無効化】 
 
・状態の確認
 
sc query lanmanworkstation
 
・無効化(コマンドが2つあります)
 
sc config lanmanworkstation depend= bowser/mrxsmb20/nsi
sc config mrxsmb10 start= disabled
 
・有効化(コマンドが2つあります。失敗した時など、元の状態に戻したい時に使います)
 
sc config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc config mrxsmb10 start= auto 
 
 
ファイル 216-2.jpg
 
 
 
【SMB v2 クライアントを、コマンド プロンプトで有効化】
 
・状態の確認 (有効になっているはずですが、念のため確認する)
 
sc query lanmanworkstation
 
・有効化(コマンドが2つあります)
 
sc config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc config mrxsmb20 start= auto 
 
・無効化(コマンドが2つあります。失敗した時など、元の状態に戻したい時に使います)
 
sc config lanmanworkstation depend= bowser/mrxsmb10/nsi
sc config mrxsmb20 start= disabled
 
 
 
ファイル 216-3.jpg
 
 
もし変更していたら、ここでもう一度再起動しておく。
再起動後、SMB v2 の現在の状態を確認しておく。
 
 
 
 
 
 
グループ ポリシーでの変更方法は以下。 
https://www.nekoprint.jp/cgi-bin/nekonekodiary/archives/81.html 

SMB v1 無効化の設定方法など

いまさらな気もしますが改めて…。
 
SMB v1 無効化 Windows Server 2008, 2008 R2, Vista, 7 編
 https://www.nekoprint.jp/cgi-bin/nekonekodiary/archives/216.html
 
SMB v1 無効化 Windows Server 2012 R2, 8.1、10 編
 https://www.nekoprint.jp/cgi-bin/nekonekodiary/archives/217.html 
 
 
 
------------------------------------------------- 
Windows Vista、7、8、10
Windows Server 2008、2008 R2、2012、2012 R2 共通
------------------------------------------------- 
★レジストリで操作(設定箇所は3つ)
※事前にレジストリのバックアップを。
 
ファイル 81-1.jpg
  
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
 REG_DWORD(32ビット)値
 値の名前: SMB1
 (デフォルトでは存在しないので手動で作成する)
 値のデータ(10進数):0
 (無効)
 
  
ファイル 81-2.jpg
  
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation
 REG_MULTI_SZ(複数行文字列)値
 値の名前:DependOnService
 値のデータ:Bowser、MRxSmb20、NSI
 (3行に分けて書く)
 
 
ファイル 81-3.jpg
 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\mrxsmb10
 REG_DWORD(32ビット)値
 値の名前:Start
 値のデータ:4
 (無効)
 
 
 
--------------------------------------------------------- 
コマンド プロンプトで操作(SMB サーバー側で操作)
--------------------------------------------------------- 
SMBv1 の無効化:
 sc config lanmanworkstation depend= bowser/mrxsmb20/nsi
 sc config mrxsmb10 start= disabled
 
 
SMBv2/v3 の有効化(v2とv3はプロトコルが一緒なので同じ動作になる):
 sc config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
 sc config mrxsmb20 start= auto
 
 
ここまで設定を行ったあとに再起動し、以下のグループ ポリシーで改めて SMBv1 を無効化します。
  
 
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
※問題が発生した場合、元に状態に戻すためのコマンドは以下。
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
 sc config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
 sc config mrxsmb10 start= auto
 
 sc config lanmanworkstation depend= bowser/mrxsmb10/nsi
 sc config mrxsmb20 start= disabled
 
 
 
 
---------------------------------------------------- 
グループ ポリシー で操作(Windows Vista 以降で共通) 
---------------------------------------------------- 
ドメイン全体へ適用されるようにドメイン ルートへグループ ポリシーを配置する。
 
コンソール ツリーの
 [コンピューターの構成]
  [基本設定] フォルダーを展開し、
   [Windows の設定] フォルダーを展開します。
 
[レジストリ] を右クリックし、
 [新規作成] をポイントして
  [レジストリ項目] を選択します。
  
[新しいレジストリのプロパティ] ダイアログ ボックスで、以下のとおりに設定します。(設定は3つ)
 
新しいレジストリ(SMB1) のプロパティ
全般タブ
 アクション:作成
 ハイブ: HKEY_LOCAL_MACHINE
 キーのパス:SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
 値の名前: SMB1
 値の種類: REG_DWORD
 値のデータ: 0
 (無効)
 
  
新しいレジストリ(Start)のプロパティ
全般タブ
 アクション:更新
 ハイブ: HKEY_LOCAL_MACHINE
 キーのパス: SYSTEM\CurrentControlSet\services\mrxsmb10
 値の名前: Start
 値の種類: REG_DWORD
 値のデータ: 4
 (無効) 
 
 
新しいレジストリ(DependOnService)のプロパティ
全般タブ
 アクション:置換
 ハイブ: HKEY_LOCAL_MACHINE
 キーのパス: SYSTEM\CurrentControlSet\Services\LanmanWorkstation
 値の名前: DependOnService
 値の種類: REG_MULTI_SZ
 値のデータ:
  Bowser
  MRxSmb20
  NSI
 (コレを適用すると、置換え前のMRxSmb10 が削除される)
 
 
ファイル 81-5.jpg
 
全て入力し終わったら全てのクライアント、サーバーにポリシーを適用させ、再起動する。
 
 
再起動後、問題なくSMBv1 が無効になっているかを確認する。 
 
 
 
 
 
 
---------------------------------------------------------
Windows XP や Windows Server 2003 が存在している場合、
SMBv1が削除されないようにWMI フィルターの設定を行う
(ポリシーを適用する前に設定する)
---------------------------------------------------------
 
ファイル 81-4.jpg
 
・WMI フィルターの名前は適当で。
・WMI クエリは以下のように設定
 
 名前空間:root\CIMv2
 クエリ:select * from Win32_OperatingSystem where Version like "6.%"
 
これでWindows Vista 以降のシステムにだけ適用されることになる。
ただ、Windows 10 だけは Winver で更新があるたびに確認しなきゃダメ?
 
上記で作成したWMI フィルターをグループ ポリシーにWMI フィルター処理としてリンクさせる。
 
 
 
------------------------------- 
and ProductType = "x" について
-------------------------------
上記のフィルターにはつけなかった、ProductType についての説明。
   
"1" = クライアントのみの場合に使用
"2" = ドメイン コントローラーの場合に使用
"3" = DCではない、サーバーOSの場合に使用
ProductType = "x" の表記が無い場合は、全てのOSが対象になります。
 

ドメイン分離してますか?

なんていうか、いろいろ面倒くさい時代になってしまいました(笑)
インターネットが普及しだした頃はここまでセキュリティについて考えることはなかったのに…
 
というわけで今回は Windows Server 2008 から導入されている 【接続セキュリティの規則】 について
改めて設定してみようと思います。
 
*****************************************
こちらのテスト環境では以下を想定。
  
Windows Server 2012 R2 = 192.168.1.205
Windows Server 2008 R2 = 192.168.1.210
Windows Server 2003 R2 = 192.168.1.5
Windows 10 = 192.168.1.225
Windows XP = 192.168.1.12
 
*****************************************
上記5つのPCがドメイン内で稼動していることを前提として設定します。
2003とXPがなければラクなのに…。
 
 
≪何をしたいのか≫
・ドメイン内のPCは共有フォルダー含め全てアクセス可能にし、それ以外のPCからのアクセスを禁止(分離)
・Windows XP とWindows 2003 端末からリモートで他のPC(2012,2008,10)へアクセス出来るようにする
 
 
 
ファイル 102-1.jpg 
 
1.まずはドメインの直下に【グループ ポリシー(名前は何でも可)】を作成し、画像の場所まで移動します。
(最初から設定されている Default Domain Policy に設定してもかまいませんよ。…設定してもいいのなら)
 
 コンピューターの構成
  ∟ポリシー
   ∟Windows の設定
    ∟セキュリティの設定
     ∟セキュリティが強化された Windows Firewall
      ∟接続セキュリティの規則 ←ココですね。
 
2.[接続セキュリティの規則] を右クリックし、【新しい規則】 をクリック
 
 
ファイル 102-2.jpg 
 
3.ドメイン分離のための設定を行います。
≪規則の種類≫ で [分離] をクリックし、【次へ】をクリック
  
 
ファイル 102-3.jpg 

4.≪要件≫を選択します。
ここでは [受信接続の認証を必須とし、送信接続に対して認証を要求する] にチェックを入れて【次へ】をクリック
 
 
ファイル 102-4.jpg 

5.≪認証方法≫を選択します。
ここでは [既定] をチェックし、【次へ】をクリック
 
6.≪プロファイル≫項は任意で設定し、【次へ】をクリック
 
7.≪名前≫項は任意の名前をつけて【完了】をクリック
 
 
ファイル 102-5.jpg
 
まとめるとこんな感じ。(画像クリックで拡大します)
 
 
8.グループ ポリシー を適用します。適用順はクライアントから。
すぐにアップデートするならコマンド プロンプトを開き、以下のコマンドを入力・実行します。
 
 Gpupdate /force
 
----------------------------------------- 
こんな要領で、リモート用の設定も作成していきます。
 
ただし、Windows XP と 2003 に限っては、運用してる人は少ないと思いますが、
Windows Server 2003 R2 以前の環境には 【接続セキュリティの規則】 が作成できないせいか、
2枚目の画像部分で ≪認証の除外≫ 設定と、≪カスタム≫ でリモート用設定の2つを新たに定義しなくちゃいけなかった。
コレが気に入らない…ま、時代が時代なだけにしょうがないかな(笑) 
 
もう1つ大事なことを書き忘れてましたが、こちらも Windows Server 2003 以前のOS に限ってですが、
TCP 445 ポートが SMBv1 でしか通信ができないので、SMBv2 以降を使うサーバーへのアクセスや共有フォルダー、
グループ ポリシーの更新ができなくなってしまいます。でも、Ping や DNS 参照、ドメインにはログオンできる。
 
XP だけ毎月やらなきゃいけないポリシー更新をどうしようか悩むわ・・・。
そのつどDCサーバー側のSMB1の値のデータを 0 から1 に戻して更新、ポリシー更新後に変更した値を元に戻して
Server, Netlogon, DFS Namespace サービスを再起動する。
コレならポリシー更新できるし、サーバー自体も再起動させなくてすむけどあほくさいな・・・(笑)
 
 
これで運用できるようになったけど、十分なテストを行ってから実環境に導入してみてください。
(IPSEC の導入を推奨しますが、IPSEC 設定についてざくっと書けば、ドメイン ネットワーク全体に整合性のみ、
暗号化はしないようにセキュリティのネゴシエートをする。その後、各コンピューター間で暗号化設定等を行う)
 
テストして最後には、認証モード(3枚目の画像)について
【受信および送信で必須】にできればいいんですけどね。
ただ、そうなれば WMI フィルターを使わないといけないのかな?今度は Windows 10 が問題になりそう…
 
 
-----------------------------------------------------------
追記)
ポリシーの適用後にサーバーと通信ができなくなった場合の対処
-----------------------------------------------------------
ただ単にポリシ-設定を戻して更新をかけ直してもポリシーの更新に失敗するだけなので、以下のように設定しなおす。
 
① DC 側の設定を最初に戻す。ここでは一度、【認証しない】を設定し、適用させる。
  
② Nslookup コマンドで DNS 参照ができるかを確認しておく。(クライアント、サーバー側ともに)
 
例)nslookup <DNS サーバー名>
 
③ ポリシーの適用が失敗したクライアントPCのファイアウォールを一時的に無効化する。
  
④ ポリシー設定を、サーバー側と同じ、【認証しない】を適用する。ただし、コンピューターに対してのみ適用する。
ターゲットを指定しないと適用に失敗する。
 
Gpupdate /target:Computer /Force
 
 
ポリシーの処理に失敗する場合には、しばらく時間をあけてもう一度実行する。(適用に時間かかった時もあった
 
⑤ ポリシーの更新が成功したら念のため Nslookup コマンドで DNS 参照ができるかを確認しておく。
 
⑥ 更新が完了したらファイアウォールを有効化に戻す。
 
⑦ もう一度、ポリシーを適用させるコマンドを実行する。今度はユーザーも含める。
 
Gpupdate /Force
 
⑧ ポリシーが適用できたら念のため Nslookup コマンドで DNS 参照ができるかを確認しておく。
 
 
 
やってて色々謎が多かった。なぜサーバー側ではなく、クライアント側のファイアウォールを無効にしないといけないのか、とか、なぜ強制的に適用させたはずのポリシーの更新が、かなり遅延した状態でないと適用しなかったのか、なぜコンピューターとユーザーポリシーを同時に処理できないのに、コンピューターポリシーだけの処理なら処理が成功するのか、など、謎は深まるばかりで楽しかった(笑)

厳密なレプリケーション整合性を有効にする方法

ファイル 212-1.jpg
 
BPAの結果が気に入らないから(笑)、対策をしてみる。
ルートサーバーはね、警告でちゃっててもいいんです。このコにはデフォゲ設定してないからアクセス出来なくて当然だし… 

★厳密なレプリケーション整合性を有効にするために、以下のコマンドを使用します。
 
-------------------------------------
repadmin /regkey ~
------------------------------------- 
 
このコマンドは、以下のレジストリ値を追加・編集するものです。作業前のレジストリ バックアップは忘れずに。
レジストリ エディタ(regedit)でもいいんですけどね・・・。
 
  
*******************************************************
追加する値:allowDivergent
正式な値:"Allow Replication With Divergent and Corrupt Partner"
 
変更する値:strict
正式な値:"Strict Replication Consistency"
*******************************************************
 
   
-------------------------------------------------------
☆ここでは以下の環境を想定しています。
・厳密なレプリケーションの整合性を有効にしろと警告が出ているDC = ns3.nekoprint.mobi
・その他のDC = ns2.nekoprint.mobi
・全てのDCに適用したい = DC=nekoprint,DC=mobi
・SYSVOL_DFSR 共有にアップグレードずみ
・DCサーバーは2台構成(Widows Server 2008 R2、Windows Server 2012 R2)で2台ともまだ厳密なレプリケーションの整合性を有効にしていない状態。
※操作はNS3 (Windows Server 2012 R2)で実施。
 
-------------------------------------------------------
◆事前に、残留オブジェクトの削除を確認してから実行します。
もし残留オブジェクトがあれば、それを削除してから実行します。
https://www.nekoprint.jp/cgi-bin/nekonekodiary/archives/211.html
 
 
レプリケーションのイベントログに、残留オブジェクト関連のイベントログ ID:2042 がなれば次へ。
  
①コマンドプロンプト(管理者として実行)へ以下を入力・実行します。 
 
ファイル 212-2.jpg
 
-------------------------------------
repadmin /regkey GC: +allowDivergent 
-------------------------------------
 
  
※1台だけ(Widows Server 2012 R2側)に設定する場合は以下。
repadmin /regkey ns3.nekoprint.mobi +allowDivergent
 
 
②次に以下のコマンドを入力・実行します。
 
ファイル 212-3.jpg
 
-------------------------------------
repadmin /regkey * +strict
-------------------------------------
 
  
このコマンドでは、厳密なレプリケーション整合性をフォレスト内のすべての DC 上で有効にします。
 
 
※念のためレジストリエディタを開き、以下の場所に値が設定されているか確認してみるとよい。 
HKLM\system\ccs\services\ntds\parameters
 
 
③ここまで行ったら、レプリケーションが正しく出来ているかを確認してみます。
 
以下のコマンドを入力し、実行します。
 
ファイル 212-4.jpg
 
-------------------------------------
repadmin /showrepl
-------------------------------------
 
 
問題がなければ、同じ内容で以下のような表示が5つ確認できる。
---------------------------------------------------------
DC=DomainDnsZones,DC=nekoprint,DC=mobi
Default-First-Site-Name\NS2 (RPC 経由)
DSA オブジェクト GUID: e326cfd2-835e-4449-ab07-681840dfab07
yyyy-mm-dd hh:mm:ss の最後の試行は成功しました。
 
---------------------------------------------------------
時々、時間の早いほうがRPC関係のログで失敗していることがあるが、数時間経過後に同じ動作を行えばすべて「yyyy-mm-dd hh:mm:ss の最後の試行は成功しました。」が表示するはずである。
 
 
④以下のコマンドを入力・実行し、複製先のレプリケーションの状態を確認します。
 
  
ファイル 212-5.jpg
 
-------------------------------------
dcdiag /s:ns2 /test:dfsrevent /v
-------------------------------------
 
  
(上記のコマンドで ns2 側のDFSR テストで失敗がないかを確認、もしくは dcdiag /s:ns2 /v で、ns2 側の現在のすべての状態で失敗がないかを確認)
 
 
エラーについては、コマンド実行後の直近のイベント生成時間を参照します。
イベントIDが 1722 もしくは 1753 エラーの場合は RPC サーバーにアクセスできない等のエラーによるものなので RPCエラーについては、以下のリンクでも対策を書いています。
 
https://www.nekoprint.jp/cgi-bin/nekonekodiary/archives/10.html 
 

 
理想は、24時間以上経過後に同じコマンドを入力・実行したときの状態で問題がないかを確認します。24時間以内に何度も同じコマンドを入力しても同じエラーなどが表示されるだけだから。
 
 
④複製元のDCである ns3 側でも同様に【 dcdiag /test:dfsrevent /v 】を実行し、失敗していないかを確認する。
 
 
⑤イベント ログの確認
すべての DC においてイベントビューアを開き、アプリケーションとサービス ログ内にある、《Directory Service もしくは ディレクトリ サービス》と《DFS Replication》ログをそれぞれ確認します。
(イベント表示が全くない場合は、SYSVOL_DFSR(SYSVOL) 共有や Netlogon 共有は問題なくできています。共有の確認は net share コマンド で行います。
 
////////////////////////////////////////////////////////// 
《Directory Service もしくは ディレクトリ サービス》
イベントID:1394 Active Directory ドメイン サービス データベースの更新を妨げていたすべての問題が解決しました。 Active Directory ドメイン データベースへの新規更新に成功しています。Net Logon サービスが再開されました。
 
イベントID:1869 Active Directory ドメイン サービスにより、次のサイトでグローバル カタログが検出されました。

グローバル カタログ:
\\ns3.nekoprint.mobi
サイト:
Default-First-Site-Name
 
 
《DFS Replication》SYSVOL_DFSR 共有の場合。
イベントID:1210 DFS レプリケーション サービスは、レプリケーション要求を受信する RPC リスナーを 正常にセットアップしました。 
 
イベントID:1206 DFS レプリケーション サービスは、ドメイン コントローラー ns2.nekoprint.mobi に正常に接続し、 構成オブジェクトにアクセスできました。
 
イベントID:5004 DFS レプリケーション サービスは、レプリケーション グループ Domain System Volume の パートナー NS2 との着信接続を正常に確立しました。
 
 
《ファイル レプリケーション サービス》SYSVOL 共有の場合。
イベントID:13516 ファイル レプリケーション サービスが、これ以上、コンピューター NS2 がドメイン コントローラー になるのを妨げなくなりました。システム ボリュームは正しく初期化されて、 システム ボリュームが SYSVOL として共有される準備が 完了したという通知を Netlogon サービスが受けました。
 
////////////////////////////////////////////////////////// 
上記のイベントが最終的に出ていれば成功です。
 

残留オブジェクトの削除を行う方法

久々にちょっと重い腰を上げてみる(笑)
 
☆ここではコマンドプロンプト(管理者として実行)で【repadmin】を使います。
 
①まずは各サーバーのGUIDを以下のコマンドで抜き出します。
 
【 repadmin /showrepl 】

これでコマンドを入力したサーバーのGUIDと、入力方向の近隣サーバーのGUIDが抜き出せます。
 
②続いて残留オブジェクトをテストモードで削除可能かを確認します。
 
以下のコマンドを使用します。
【 repadmin /removelingeringobjects 】
 
が、少々引数についてなどが複雑なので細かく説明しますと、このコマンドのあとに続けて<残留オブジェクトの削除が必要な問題のある DC>と、<参照DCのGUID>と、<名前付きコンテキスト>と、テストモードの引数を続けて入力します。
 
-------------------------------------------------------
☆環境例
・問題のあるDC Windows Server 2008 R2 = ns2.nekoprint.mobi
・正常動作しているDC Windows Server 2012 R2 = ns3.nekoprint.mobi
 
 参照GUID = 87b1ec13-d9ca-4fc4-9fc9-7e9bcf2133c4
・名前付きコンテキスト = DC=nekoprint,DC=mobi
・テストモード用の引数 = /advisory_mode
 
-------------------------------------------------------
上記を使い例文を書きますと以下のようになります。
※1行として入力・実行します。
作業を行うDCはどちらでもいいのですが、ここでは上記の正常動作しているDC側から操作します。
 
repadmin /removelingeringobjects ns2.nekoprint.mobi 87b1ec13-d9ca-4fc4-9fc9-7e9bcf2133c4 DC=nekoprint,DC=mobi /advisory_mode
 
 
実行した結果、入力したコマンドのすぐ下に
 
「ns3.nekoprint.mobi 上で RemoveLingeringObjects に成功しました。」
 
と出れば成功である。
 
 
③つづいて本番である、残留オブジェクトの削除を行います。
これは上記のコマンドから /ADVISORY_MODE 部分を削除してから実行します。
 
 
repadmin /removelingeringobjects ns2.nekoprint.mobi 87b1ec13-d9ca-4fc4-9fc9-7e9bcf2133c4 DC=nekoprint,DC=mobi
 
 
これも成功したらテストモードと同様に
 
「ns3.nekoprint.mobi 上で RemoveLingeringObjects に成功しました。」
 
と表示されます。
 
 
④イベント ログの確認を行う。
イベントビューアを開き、アプリケーションとサービス ログ内にある、《ディレクトリ サービス》ログを確認します。
 
イベントID:1938、1942、1937 が最終的に出ていれば成功であるが、1943が出ていたらコマンド入力ミスの可能性もあるので、入力内容を確認し再度コマンドの実行を行います。
 
 
 
  
 
 
 
⑤次にレプリケーションを強制的に実行します。
ただし、DCの情報が正しいかを確認してから行うようにすること。
 
 
以下のコマンドを順に入力・実行します。
 
repadmin /replicate ns2.nekoprint.mobi ns3.nekoprint.mobi cn=schema,cn=configuration,dc=nekoprint,dc=mobi /force
 
repadmin /replicate ns2.nekoprint.mobi ns3.nekoprint.mobi DC=DomainDnsZones,DC=nekoprint,DC=mobi /force
 
repadmin /replicate ns2.nekoprint.mobi ns3.nekoprint.mobi DC=ForestDnsZones,DC=nekoprint,DC=mobi /force
 
repadmin /replicate ns2.nekoprint.mobi ns3.nekoprint.mobi cn=configuration,dc=nekoprint,dc=mobi /force
 
 
各コマンドの実行結果、「ns3.nekoprint.mobi から ns2.nekoprint.mobi への同期を完了しました。」と表示されれば成功である。
 
 
 
⑥ここまで行ったら、レプリケーションが正しく出来ているかを確認してみます。
 
以下のコマンドを入力し、実行します。
 
repadmin /showrepl
 
 
問題がなければ、同じ内容で以下のような表示が5つ確認できる。
---------------------------------------------------------
DC=DomainDnsZones,DC=nekoprint,DC=mobi
Default-First-Site-Name\NS2 (RPC 経由)
DSA オブジェクト GUID: e326cfd2-835e-4449-ab07-681840dfab07
yyyy-mm-dd hh:mm:ss の最後の試行は成功しました。
---------------------------------------------------------
 
時々、時間の早いほうがRPC関係のログで失敗していることがあるが、数時間経過後に同じ動作を行えばすべて「yyyy-mm-dd hh:mm:ss の最後の試行は成功しました。」が表示するはずである。
 
 
⑦以下のコマンドを入力・実行し、複製先のレプリケーションの状態を確認します。
 
dcdiag /s:ns2 /test:dfsrevent /v
 
(上記のコマンドで ns2 側のDFSR テストで失敗がないかを確認、もしくは dcdiag /s:ns2 /v で、ns2 側の現在のすべての状態で失敗がないかを確認)
 
 
エラーについては、コマンド実行後の直近のイベント生成時間を参照します。
イベントIDが 1722 もしくは 1753 エラーの場合は RPC サーバーにアクセスできない等のエラーによるものなので RPCエラーについては、以下のリンクにて対策を書いています。
 
https://www.nekoprint.jp/cgi-bin/nekonekodiary/archives/10.html 
 

 
理想は、24時間以上経過後に同じコマンドを入力・実行したときの状態で問題がないかを確認します。24時間以内に何度も同じコマンドを入力しても同じエラーなどが表示されるだけだから。
 
 
⑧複製元のDCである ns3 側でも同様に【 dcdiag /test:dfsrevent /v 】を実行し、失敗していないかを確認する。
 
 
⑨イベント ログの確認
すべての DC においてイベントビューアを開き、アプリケーションとサービス ログ内にある、《ディレクトリ サービス》と《DFS Replication》ログをそれぞれ確認します。
 
////////////////////////////////////////////////////////// 
《ディレクトリ サービス》
イベントID:1394 Active Directory ドメイン サービス データベースの更新を妨げていたすべての問題が解決しました。 Active Directory ドメイン データベースへの新規更新に成功しています。Net Logon サービスが再開されました。
 
イベントID:1869 Active Directory ドメイン サービスにより、次のサイトでグローバル カタログが検出されました。

グローバル カタログ:
\\ns2.nekoprint.mobi
サイト:
Default-First-Site-Name
 
 
《DFS Replication》
イベントID:1210 DFS レプリケーション サービスは、レプリケーション要求を受信する RPC リスナーを 正常にセットアップしました。 
 
イベントID:1206 DFS レプリケーション サービスは、ドメイン コントローラー ns2.nekoprint.mobi に正常に接続し、 構成オブジェクトにアクセスできました。
 
イベントID:5004 DFS レプリケーション サービスは、レプリケーション グループ Domain System Volume の パートナー NS3 との着信接続を正常に確立しました。
 
////////////////////////////////////////////////////////// 
上記のイベントが最終的に出れば成功であるが…。
 

SYSVOL複製の変更方法…DFS-Rにする

DFS-R移行(SYSVOL複製方法変更)について、ちょっと忘れそうだからメモ。
 
SYSVOL複製(FRS,DFS-R)
 
必要条件 ※2012R2以降はFRS非推奨
・ドメインの機能レベル2008以降
 
①DFS-Rの状態確認
 dfsrmig /getglobalstate

ファイル 208-1.jpg

 
※DFS-R移行がまだ初期化されていません、が表示されるかを確認する
 
②DFS-Rを[開始]状態にする
 dfsrmig /setglobalstate 0
 
※これを行うことによりすべてのDCが[開始]状態に変更されいることを確認する
 
③DFS-Rの状態確認
 
 dfsrmig /getglobalstate
 
④すべてのDCの状態の確認
 dfsrmig /getmigrationstate

ファイル 208-2.jpg
 
⑤DFS-Rを[準備完了]状態にする
※すべてのDCで[開始]状態になってからこのコマンドを入力、実行する
 dfsrmig /setglobalstate 1

ファイル 208-3.jpg

※時間がかかることがある(15分程度~)
 
⑥すべてのDCのイベントビューアで下記のイベントログを確認
 
ID8010・・・移行準備開始を示すイベント
ID8014・・・移行準備完了を示すイベント
 
※移行準備完了すると[%windir%\SYSVOL_DFSR]フォルダーが作成される
 
⑦[リダイレクト]状態にする
 
 dfsrmig /setglobalstate 2
 
⑧すべてのDCのイベントビューアで下記のイベントログを確認
 
ID8015・・・リダイレクト処理開始を示すイベント
ID8017・・・リダイレクト処理完了を示すイベント
 
⑦[削除済み]状態にする
 
 dfsrmig /setglobalstate 3
 
⑧すべてのDCのイベントビューアで下記のイベントログを確認
 
ID8018・・・削除済み処理開始を示すイベント
ID8020・・・削除済み処理完了を示すイベント
 
⑨エラーがないかを確認する
⑩NTFRSサービスが無効になっているかを確認する
ファイル 208-4.jpg
 
 
最後に、ドメイン機能レベルが Windows Server 2008 以上で、SYSVOL の複製を既存の FRS サービスではなく、DFSR サービスを使用する場合にはDFSRで使用するポート【TCP 5722】を開放する
 
具体的には 以下の部分
・Windows Firewall でDFSレプリケーションをDC間で通過させる
  DFS レプリケーション (RPC 受信) 
  DFS レプリケーション (RPC-EPMAP)
 
・IPSECを利用している場合はポート【TCP 5722】をDC間で通過させる

Exchange Server 2003 複数ドメインの設定方法

Exchange Server を設定するとき、英文字は大文字・小文字(SMTP・smtp など)がそれぞれ
別の設定として認識されるので必ず間違いがないかを確認 
 
 
★設定したい内容
・Windows Server 2003ドメインで操作
・現在のドメイン名:test.local
・追加したいドメイン名:test1.local
 ※ただしプライマリには、現在のドメイン名を継続で利用が前提条件であること
 (後に、プライマリを変更予定) 
・追加ドメインユーザー用のメールアカウント設定
・既存+追加アカウントという構成にして、複数ドメインアカウントで電子メールを受信可能にするための設定
・新規ユーザーを作成して転送専用メールアドレスとして使う。作成したユーザーアカウントでログオンしない
 
 
====================================================
☆複数ドメインの設定方法
====================================================
   
① 「スタート」
   -「すべてのプログラム」
    -「Microsoft Exhange」
     -「システム マネージャ」の順にクリック
② 「受信者」
   -「受信者ポリシー」
    -「Default Policy」の順にクリックし、プロパティ開く
③ 「電子メール アドレス(ポリシー)」タブクリック
   -「新規」クリック
④ 「SMTP アドレス」選択し、「OK」クリック
⑤ 「アドレス」へ「@test1.local」を入力
⑥ "このアドレスへのメール配信すべてに、このExchange組織を使用する"
  チェックが入っていることを確認して「OK」クリック
⑦ 「電子メール アドレス(ポリシー)」タブに戻るので、
  追加したドメインにチェックを入れずに「適用」クリック
⑧ 「OK」 クリックし、Exchange システム マネージャを終了する
 
 
数分程度待ってから、(ユーザーの規模などによるので一概にはいえない)
  ADユーザーとコンピュータを開き、ドメインに所属しているユーザーアカウントのプロパティで、
  [電子メール アドレス]タブに、新ドメインのメールアカウントが追加されていないかを確認しておくとよい 
 
 
 
//////////////////////////////////////////////////////////////////////////////// 
プライマリを変更する場合は、⑦に戻り、プライマリにする側のアドレスを選択してから
「プライマリに設定」をクリックし、「適用」 をクリック 
 
 【確認メッセージ】ウィンドウが表示される
種類が[smtp]の電子メール アドレスが変更されました。
対応する受信者の電子メール アドレスをすべて更新して、これらの新しいアドレスと一致させますか?
 「はい」 をクリックする
 
 【確認メッセージ】ウィンドウが表示される
種類が[SMTP]の電子メール アドレスが変更されました。
対応する受信者の電子メール アドレスをすべて更新して、これらの新しいアドレスと一致させますか?
 「はい」 をクリックする
 
「OK」 をクリックし、[Default Policy のプロパティ] を終了する
 
 
※上記手順では、全体を通して既存の既定アカウントが新ドメインのメールアドレスに変更となるため、
既存ドメインと新ドメインの両方を使用する場合には、
上記手順⑦ 生成ルールにある、[smtp] のチェックもせずに
「適用」 後、「OK」 クリックすること
 
いつどのタイミングで実行するかは状況によって変わるので、
いつでも変更しても問題のないようにテストは絶対したほうがいいのかなと思います。
 
////////////////////////////////////////////////////////////////////////////////
ここから下の設定は、プライマリを変更するまでの間、いったん複数ドメインの設定だけ登録をしておいて、
メールアカウントは既存のもので送受信するユーザーと、新規アカウントを使用するユーザー用の設定
あとからプライマリを変更したときに全体が変わってしまうのを防ぐ目的です 


 
 
====================================================
☆新ドメイン用にメールアカウントを変更する
====================================================
  
※既存ユーザーの電子メール アドレスの一括変更(追加)をする場合には、
 最初に登録されている電子メール アドレスをエクスポートする
 これは、既存のメールアカウントで送受信するという場合に設定すると便利
 その後、設定内容を編集してインポートしておく 
 
 
① Exchange Server側でコマンドプロンプトを開く
② 以下を入力し、実行する
 
LDIFDE -u -f c:\export.ldf -r "(objectClass=User)" -d "cn=users,DC=test,DC=local" -l proxyaddresses
 
  
※ オプションの説明:
  -u unicode文字の扱いを行う
  -f ファイル選択(ここでは保存先を指定している)
  -r オブジェクトの選択
  -d ドメイン名
  -l 属性の選択 proxyaddresses は、[電子メール アドレス] タブのこと
 
 
③ エクスポートしたファイルをメモ帳で開く
 
開くと以下のような感じになる
------------------------------------------------

dn: CN=IUSR_EXCHANGE2003,CN=Users,DC=test,DC=local
changetype: add

dn: CN=IWAM_EXCHANGE2003,CN=Users,DC=test,DC=local
changetype: add

dn: CN=Administrator,CN=Users,DC=test,DC=local
changetype: add
proxyAddresses: SMTP:Administrator@test.local
proxyAddresses: X400:c=JP;a= ;p=test;o=Exchange;s=Administrator;
proxyAddresses: smtp:postmaster@test.local

dn: CN=Guest,CN=Users,DC=test,DC=local
changetype: add

dn: CN=SUPPORT_388945a0,CN=Users,DC=test,DC=local
changetype: add

dn: CN=テスト 太郎,CN=Users,DC=test,DC=local
changetype: add
proxyAddresses: SMTP:test-taro@test.local
proxyAddresses: X400:c=JP;a= ;p=test;o=Exchange;s=test-taro;

dn: CN=test-jiro,CN=Users,DC=test,DC=local
changetype: add
proxyAddresses: SMTP:test-jiro@test.local
proxyAddresses: X400:c=JP;a= ;p=test;o=Exchange;s=test-jiro;

dn: CN=testuser3,CN=Users,DC=test,DC=local
changetype: add
proxyAddresses: SMTP:testuser3@test.local
proxyAddresses: X400:c=JP;a= ;p=test;o=Exchange;s=testuser3;

dn: CN=krbtgt,CN=Users,DC=test,DC=local
changetype: add

------------------------------------------------ 
④ 電子メールアドレスの変更が必要なユーザー以外は全削除し、
  以下のような内容に編集する
  ※ここではユーザー名「テスト 太郎」と「test-jiro」を対象とする
 
 
<設定したい内容>
 
「テスト 太郎」のメールアドレス:
現)test-taro@test.local
新)taro@test1.local (プライマリ)
  test-taro@test.local 
 
「test-jiro」のメールアドレス:
現)test-jiro@test.local
新)jiro@test1.local (プライマリ)
  test-jiro@test.local
 
 
---------------ここから---------------
 
dn: CN=テスト 太郎,CN=Users,DC=test,DC=local
changetype: modify
replace: proxyAddresses
proxyAddresses: smtp:test-taro@test.local
-
add: proxyAddresses
proxyAddresses: SMTP:taro@test1.local
-

dn: CN=test-jiro,CN=Users,DC=test,DC=local
changetype: modify
replace: proxyAddresses
proxyAddresses: smtp:test-jiro@test.local
-
add: proxyAddresses
proxyAddresses: SMTP:jiro@test1.local
-

---------------ここまで---------------
 
ファイルの内容の解説だが、「テスト 太郎」を例にしてみると、
 1行目…変更したいユーザーを選択している
 2行目…変更する種類(修正)
 3行目…proxyaddresses=「電子メール アドレス」タブのこと
      replace=変更
 4行目…電子メールアドレスとその種類(SMTP)
 6行目…add=登録。電子メール アドレス登録をしますという宣言
 7行目…登録したい電子メール アドレス
 
"-"(ハイフン) は、必ず必要
また、組織単位(OU)での設定もできる
 
「Administrator」アカウントのように、デフォルトから2つ存在
しているようなメールアドレスを削除するような場合には、
いったん、プライマリを変更しないといけないようである
 
SMTP(大文字)…プライマリに設定したメールアドレス
smtp(小文字)…プライマリではない側のアドレス
 
「Exchange全般」タブのエイリアスを変更する場合は、
proxyaddresses -> mailNickname に変更すればできる
 
もし、プライマリアドレスを削除するなら、以下のように追加する
--------------------------------------
  
delete: proxyAddresses
proxyAddresses: SMTP:test-taro@test.local
-
 
-------------------------------------- 
  
⑤ 名前をつけて.ldfファイルとして保存する(unicode)
   ここでは、Cドライブルートにファイル名 「import.ldf」 として保存する
⑥ コマンドプロンプトを開き、以下を入力・実行する
 
   ldifde -i -u -f c:\import.ldf
 
オプションの説明:
 -i インポートするモード
 -u unicode文字の扱いを行う
 -f ファイル選択(ここでは保存したファイルを呼び出すときに指定している)
 
  
========================================
 
これで変更されるまで数分待ちます。
その後、ADユーザーとコンピュータで確認する
※すぐに確認すると、種類:X400  c=JP;a= ;p=test;o=Exchange;s=test-taro;
が表示されない場合があるが、数分経てば表示される
 
 
上の例で変更し、インポートした結果は次のようになる
ADユーザーとコンピュータで確認しておく
-------------------------------------- 
 
「テスト 太郎」
SMTP(大文字/太字)プライマリ:taro@test1.local
smtp(小文字/細字)その他:test-taro@test.local
X400:c=JP;a= ;p=test;o=Exchange;s=test-taro;
 
「test-jiro」
SMTP(大文字/太字)プライマリ:test-jiro@test.local
smtp(小文字/細字)その他:jiro@test1.local
X400:c=JP;a= ;p=test;o=Exchange;s=test-jiro;
 
-------------------------------------- 
上記のようになっていれば成功
もし、転送設定をしたい場合には、上記で書いた内容を行うようにすればよい
 
 
ただし、ここで最初に書いた複数ドメインの設定をしていて、
プライマリを変更しているとこれとは違った動作になる。
この場合、各ユーザーの電子メールアドレスがアカウントは同一で、
複数ドメインの設定したドメイン名で最初から登録されるようになる
設定しだいでいろいろと変化があるので、ちゃんと確認しないといけない
 
 プライマリドメイン:test.local
 複数追加ドメイン:test1.local
 ユーザーアカウント名:test-taro
 だと、登録される電子メールアドレスは以下のようになっている
  SMTP:test-taro@test.local
  smtp:test-taro@test1.local

上記のエクスポートデータの編集例では、M&Aなんかで、とある会社が、別の会社と合併した(された)ときなど、
ドメインが複数にまたがって存在していてそれぞれでメールアドレスを取得するときなどに便利なのかな?
  
   
それと、やはり送信時にはプライマリドメインでしか送信できないので、
新規ドメインで送信をする場合には、対応するユーザーを作成しておかなければいけない
 
 
====================================================  
☆転送用メールアドレスの設定を行う
====================================================
 
① 転送のための新規ユーザー追加を行う
 
事前準備(確認)
・新規ユーザー追加するためのユーザーログオン名と表示名、パスワードなどのリスト
・転送のみのユーザー追加なので、パスワード無期限にチェックをすることが前提
・転送先のメール アドレス
・転送先(連絡先)の表示名・姓・名・転送先メール アドレスなどのリスト
・連絡先オブジェクト用に新規OUを作成する際の名前
 ※例)これは、ユーザー名[test-jiro]と、連絡先[test-jiro] を同一のOU(Usersコンテナ)に作成できないから。
  別名でそれぞれ登録するのなら、[新規ユーザー1 + 連絡先新規ユーザー1] の2つを
  用意しなければいけない
  ここではわかりやすいように 【転送用】 としている
  
② 事前に連絡先オブジェクト用OU【転送用】 を新規作成しておくため、以下のコマンドを実行する
 
   dsadd ou OU=転送用,dc=test,dc=local
 
 
③ Users コンテナへユーザー追加をする
  ここでは、5ユーザー追加している
  追加する場合には、一括登録コマンドds コマンドを使う
    
-------------ここから-------------
 
dsadd user "cn=test-user1,cn=users,dc=test,dc=local" -display test-user1 -upn test-user1 -pwd p@ssWord -ln test-user1 -pwdneverexpires yes
dsadd user "cn=test-user2,cn=users,dc=test,dc=local" -display test-user2 -upn test-user2 -pwd p@ssWord -ln test-user2 -pwdneverexpires yes
dsadd user "cn=test-user3,cn=users,dc=test,dc=local" -display test-user3 -upn test-user3 -pwd p@ssWord -ln test-user3 -pwdneverexpires yes
dsadd user "cn=test-user4,cn=users,dc=test,dc=local" -display test-user4 -upn test-user4 -pwd p@ssWord -ln test-user4 -pwdneverexpires yes
dsadd user "cn=test-user5,cn=users,dc=test,dc=local" -display test-user5 -upn test-user5 -pwd p@ssWord -ln test-user5 -pwdneverexpires yes
 
-------------ここまで-------------
   
コマンドの説明:
dsadd user ………… dsコマンドでADユーザーを追加します
-display …………… [全般] タブ-「表示名」
-pwd ………………… パスワードを設定する (ここでは、p@ssWord  と設定)
-upn ………………… [アカウント] タブ-「ユーザーログオン名(U)」
-pwdneverexpires … パスワードを無期限設定にするかどうかのオプション yes|no で設定変更が可能
その他、-ln(姓),-fn(名)などいろいろある。
 
  
④ ADユーザーとコンピュータを開き、③で作成したユーザー(test-user1~5)をすべて選択する
⑤ 右クリックして、Exchange タスクを選択する。
⑥ "Exchange タスク ウィザードへようこそ" が起動する
   次へ をクリック
⑦ "実行可能なタスク" では、「メールボックスの作成」 をクリックし、「次へ」 をクリック
⑧ "メールボックスの作成" では、任意のエイリアス名を確認(入力)し、
  "サーバー"、"メールボックス ストア" に表示されている内容を確認し、「次へ」 をクリック
  -> 複数選択している場合のエイリアス部分は、<新しい受信者のエイリアスは自動的に作成されます> 
   と表示され、グレーアウトしている
⑨ "Exchange タスク ウィザードの完了" が表示されれば「完了」 をクリックする
⑩ 作成したユーザーアカウントにExchange属性が付与され、
  電子メール アカウントの設定がされるまでしばらく待つ
⑪ 続いて連絡先(転送先)オブジェクトを、②で作成したOU【転送用】 へ登録する
 
-------------ここから-------------
 
dsadd contact cn=test-user1,ou=転送用,dc=test,dc=local -display test-user1
dsadd contact cn=test-user2,ou=転送用,dc=test,dc=local -display test-user2
dsadd contact cn=test-user3,ou=転送用,dc=test,dc=local -display test-user3
dsadd contact cn=test-user4,ou=転送用,dc=test,dc=local -display test-user4
dsadd contact cn=test-user5,ou=転送用,dc=test,dc=local -display test-user5
 
-------------ここまで-------------
  
コマンドの説明:
dsadd contact… dsコマンドで、ADへ連絡先オブジェクト追加します
-display……… [全般] タブ-「表示名」
 
 
⑫ 登録した連絡先にExchangeメールボックスを作成する
  ※ここでは、"Exchange タスク" を使うことができないのでコマンドにて設定する
  ・メモ帳などで以下のように入力し、csv形式などで保存する。
   ここでは、C:\create_mailbox.csv(unicode形式で保存)とした

-------------ここから-------------
 
dn: cn=test-user1,ou=転送用,DC=test,DC=local
changetype: modify
add: mailNickname
mailNickname: test-user1
-
add: targetAddress
targetAddress: SMTP:test-user1@nekoprint.mobi
-

dn: cn=test-user2,ou=転送用,DC=test,DC=local
changetype: modify
add: mailNickname
mailNickname: test-user2
-
add: targetAddress
targetAddress: SMTP:test-user2@nekoprint.mobi
-

dn: cn=test-user3,ou=転送用,DC=test,DC=local
changetype: modify
add: mailNickname
mailNickname: test-user3
-
add: targetAddress
targetAddress: SMTP:test-user3@nekoprint.mobi
-

dn: cn=test-user4,ou=転送用,DC=test,DC=local
changetype: modify
add: mailNickname
mailNickname: test-user4
-
add: targetAddress
targetAddress: SMTP:test-user4@nekoprint.mobi
-

dn: cn=test-user5,ou=転送用,DC=test,DC=local
changetype: modify
add: mailNickname
mailNickname: test-user5
-
add: targetAddress
targetAddress: SMTP:test-user5@nekoprint.mobi
-
 
-------------ここまで-------------
  
説明:
mailNickname ………[Exchange全般] タブ-「エイリアス」
targetAddress ……[Exchange全般] タブ-「電子メール」
 
 
⑬ 作成したファイルをインポートする。以下のように入力・実行する。
 
   ldifde -i -u -f C:\create_mailbox.csv
 
 
ここまで設定すると、はじめて転送先として既存のユーザーに転送設定が入れられる。
   
⑭ 転送したいユーザーに対して転送先を設定する。
  ※ここではUsersに所属するtest-user1~5を、OU=転送用に登録した
  連絡先オブジェクトtest-user1~5 とを紐付ける
 
  ・メモ帳などで以下のように入力し、csv形式などで保存する
  ここでは C:\altRecipient.csv (unicode形式で保存)とした
 
-------------ここから-------------
 
dn: cn=test-user1,cn=users,DC=test,DC=local
changetype: modify
add: altRecipient
altRecipient: CN=test-user1,OU=転送用,DC=test,DC=local
-

dn: cn=test-user2,cn=users,DC=test,DC=local
changetype: modify
add: altRecipient
altRecipient: CN=test-user2,OU=転送用,DC=test,DC=local
-

dn: cn=test-user3,cn=users,DC=test,DC=local
changetype: modify
add: altRecipient
altRecipient: CN=test-user3,OU=転送用,DC=test,DC=local
-

dn: cn=test-user4,cn=users,DC=test,DC=local
changetype: modify
add: altRecipient
altRecipient: CN=test-user4,OU=転送用,DC=test,DC=local
-

dn: cn=test-user5,cn=users,DC=test,DC=local
changetype: modify
add: altRecipient
altRecipient: CN=test-user5,OU=転送用,DC=test,DC=local
-
 
-------------ここまで-------------
   
説明:
altRecipient…[Exchange全般] タブ-[配信オプション]-「転送先」
 
 
⑮ 以下を入力・実行する。 
 
  ldifde -u -i -f C:\altRecipient.csv
 
 
これで外部メールアドレスへ転送する用意ができました。
 
ここまでの設定で、Userコンテナに所属しているユーザー(例:test-user1)にメールが配信されると、
OU=転送先 に登録した連絡先ユーザー(test-user1)のメールアドレス宛に配信されるようになる。
 
 
 
 
 
/////////////////////////////////////////////////////////////////////////
※追記。
 
 ここでは、⑥の手順に、【Exchange タスク】 を使用しました。
 それには理由がありまして、ADユーザーとコンピュータを開いて、ユーザーのプロパティを
 見ればわかるのですが、下の1枚目の画像のようになっているのが通常なんです。
 
ファイル 198-3.jpg
 
しかし、ココを上記のコマンドで作成してしまうと2枚目の写真のようになってしまいます。
※[Exchange 全般] タブの表示内容と、[Exchange の機能] タブがない状態になってしまう。
 
ファイル 198-4.jpg

これもコマンドで一括修正できるのですが、そのぶん、行数が増えてしまうので、
大量のユーザーを登録する場合にはメンドイからです。
 
 
それでもコマンドで、という場合にはいったん以下のコマンドで Users にある、
全ユーザーデータをエクスポートします。 
 ldifde -u -f c:\export2.ldf -d "cn=users,dc=test,dc=local"
  
 
※ここでは、ファイルの保存先にCドライブルートを指定し、export2.ldf という名前で保存。
  
今度はそのエクスポートしたデータにある内容を、新規作成するユーザーに登録するのですが、
それは、【homeMTA:】 という部分をそのままコピー&ペーストすればできます。
ユーザーを新規作成後、下のようにすれば可能になる。
 
※ここでは、test-user10 をコマンドで新規作成し、
 その後メールボックスの新規作成と、[Exchange 全般] タブの "エイリアス" を設定する、とします。
 
-------------ここから-------------
 
dn: cn=test-user10,cn=Users,DC=test,DC=local
changetype: modify
add: mailNickname
mailNickname: test-user10
-
add: homeMTA
homeMTA:
CN=Microsoft MTA,CN=EXCHANGE2003,CN=Servers,CN=最初の管理グループ,CN=Administrative Gro
ups,CN=Exchangeテスト,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=test,DC=local
-

-------------ここまで------------- 
 
コマンドの説明:
homeMTA・・・[Exchange 全般] タブ
※ CN=Exchangeテスト・・・ここには、Exchange システム マネージャ で表示されている名前が入る 
 
 
 
また、もう作っちゃったという場合には、以下のようにすれば、修正できる。
 
-------------ここから-------------
 
dn: cn=test-user10,cn=Users,DC=test,DC=local
changetype: modify
add: homeMTA
homeMTA:
CN=Microsoft MTA,CN=EXCHANGE2003,CN=Servers,CN=最初の管理グループ,CN=Administrative Gro
ups,CN=Exchangeテスト,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=test,DC=local
-

-------------ここまで------------- 


このようにすれば、1枚目の写真と同じになる。(Exchane タスクで作成した場合と同じになる。)
もちろん、[Exchange の機能] タブも一緒に表示されるようになる。 
 
ま、こんなややこしいことをするくらいなら、というわけで【Exchange タスク】を使用したということです。 
///////////////////////////////////////////////////////////////////////// 
 
 
 
 
 
 
==================================================== 
☆ ここまでの設定の確認をしておく(転送設定確認) 
====================================================
 
ユーザーオブジェクトに対して電子メールアドレスの設定内容と
転送先である連絡先が正しく割り当てられているかを
確認するためのコマンドは以下のようになる。
※ -dオプションでOUなどの指定もできる。
 
ここではCドライブ直下に exchange.csv として保存。
 
ldifde -u -f c:\exchange.csv -r "(objectclass=user)" -l altrecipient,proxyaddresses
 
 
下のような感じで出力される。
※一番上で書いた複数ドメインの設定をしているが、プライマリはまだ変更していないときの出力例
 
  ユーザー名:test-user1
  プライマリドメイン:test.local
  その他ドメイン:test1.local
  プライマリメールアドレス:user-test1@test.local
  転送先(連絡先オブジェクト):転送用OU内にtest-user1を作成し、紐付けしている場合
 
-------------------------------
dn: CN=test-user1,CN=Users,DC=test,DC=local
changetype: add
altRecipient: CN=test-user1,OU=転送用,DC=test,DC=local
proxyAddresses: SMTP:test-user1@test.local
proxyAddresses: X400:c=JP;a= ;p=test;o=Exchange;s=test-user1;
-------------------------------
 
クエリベースの配布グループも作成しておいたほうがよい。 
ただし、作成する場合には、Exchange サーバーをネイティブモードにしないといけない。

スクリプトによる、クライアントのドメイン参加方法

Windows Server 2012 対応確認済みです。
ローカルドメイン環境で、1箇所だけ修正があったくらいです。(下のほうに書いています) 
 
------------------------------------------------------------
追記
◆このスクリプトからうまくドメイン参加ができない方へ
コマンドプロンプト”管理者として実行”してください。
その後、コマンドからスクリプトファイルを実行してください。 
------------------------------------------------------------
  
確認済みOS:Windows XP, /Windows Server 2003, /Windows Vista, /Windows Server 2008, /
 Windows 7, /Windows Server 2008 R2, /Windows Server 2012, /Windows 10
 
   
ドメインコントローラー確認済みOS:Windows Server 2012 R2 までの全OS(2016はまだ勉強中なのでやってない笑)
 
  
※Windows Server 2012 対応とか、いろいろ追加したり変更したりしています。 
 3パターンのスクリプトを記述
  ・ドメインの所属変更
  ・ワークグループからドメイン参加する
  ・ドメインから離脱する場合
 
 
 
これはスクリプト内に以下の項目をひとまとめにしてみました
 ・DNSの設定変更
 ・ドメインコントローラーとのPing疎通確認
 ・ドメイン離脱
 ・ドメイン参加
 ・所属変更前ドメイン上のコンピュータアカウントを無効にする
 ・5秒のち、再起動

条件:
現在は「nekoserver.local」2003ドメインに
VISTAコンピュータ「VISTATEST-PC」が参加している状態で、
「nekoprint.local」2008ドメインに所属変更だけを行うことを想定
しています。(移行ではない)
あらかじめクライアントPCを鯖と同一セグメント上に移動させておく

ドメインの所属変更時に収集しておくべきこと。
 ・変更先のドメイン管理者ユーザー名とパスワード
 ・新ドメインのDNSサーバアドレス 10.10.1.9 10.10.1.10
 ・新ドメイン名 nekoprint.local
 ・所属変更前のドメイン管理者ユーザー名とパスワード
以上を事前にスクリプト内で書き換えます。


場所:

 11行目…"" 内を、新DNSサーバーのアドレスに書き換える
  arrDNSServers = Array("10.10.1.9","10.10.1.10")

 20行目…"" 内を、新DNSサーバーに書き換える
  strMachines = "dc1.nekoprint.local"
   ※ここはping確認だけなので名前解決できないなら、IPアドレスでもOK

 33行目…NETSETUPをNETCENTERに書き換える
 (クライアントOS:VISTA以降のみ)
 
※34行目…"" 内を、旧ドメインの管理者パスワードに書き換える
   strPassword = "********"
 ※なくてもOK。その場合は行ごと削除。

※35行目…" 内を、旧ドメインの管理者名に書き換える
  strUser = "administrator"
 ※なくてもOK。その場合は行ごと削除。

 56行目…"" 内を、新ドメイン名に書き換える
  strDomain = "nekoprint.local"

※57行目…"" 内を、新ドメインの所属させるOUに書き換える
  strOU = "OU=TestGroup,DC=nekoprint,DC=local"
 ※なくてもOK。その場合は行ごと削除。

 58行目…"" 内を、新ドメイン名の管理者名に書き換える
  strUser = "administrator"

 59行目…"" 内を、新ドメインの管理者パスワードに書き換える
  strPassword = "********"

 79行目…"" 内のcn=部分にコンピュータ名、
     OU=部分は所属のOUに書き換える
    (デフォルトの位置computersの場合はcn=computersにする)
     dc=部分は旧ドメイン名に書き換える
  cn=VISTATEST-PC,OU=TestGroup,dc=nekoserver,dc=local


これがその内容。
以下の部分をメモ帳に貼り付けて「ドメイン参加.vbs」とした。
 
-------------------------------------------------------
・ドメインの所属変更スクリプト 
-------------------------------------------------------
On Error Resume Next

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNetCards = objWMIService.ExecQuery _
("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")

For Each objNetCard in colNetCards
arrDNSServers = Array("10.10.1.9","10.10.1.10")
objNetCard.SetDNSServerSearchOrder(arrDNSServers)
If errEnable = 0 Then
WScript.Echo "DNSアドレスは正常に変更されました"
Else
WScript.Echo "DNSアドレスの変更ができませんでした。管理者まで問い合わせてください。"
End If
Next

strMachines = "dc1.nekoprint.local"
aMachines = split(strMachines, ";")
For Each machine in aMachines
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
ExecQuery("select * from Win32_PingStatus where address = '"_
& machine & "'")
For Each objStatus in objPing
If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>0 Then
WScript.Echo("コンピューター " & machine & " への ping疎通確認ができません。通信に失敗しました。")
End If
Next
Next

Const NETCENTER_ACCT_DELETE = 2 'Disables computer account in domain.
strPassword = "********"
strUser = "administrator"

Set objNetwork = CreateObject("WScript.Network")
strComputer = objNetwork.ComputerName

Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & _
strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & strComputer & "'")
strDomain = objComputer.Domain
intReturn = objComputer.UnjoinDomainOrWorkgroup _
(strPassword, strDomain & "\" & strUser, NETSETUP_ACCT_DELETE)

Dim strUser, strPassword, strDomain
Const JOIN_DOMAIN = 1
Const ACCT_CREATE = 2
Const ACCT_DELETE = 4
Const WIN9X_UPGRADE = 16
Const DOMAIN_JOIN_IF_JOINED = 32
Const JOIN_UNSECURE = 64
Const MACHINE_PASSWORD_PASSED = 128
Const DEFERRED_SPN_SET = 256
Const INSTALL_INVOCATION = 262144
strDomain = "nekoprint.local"
strOU = "OU=TestGroup,DC=nekoprint,DC=local"
strUser = "administrator"
strPassword = "********"

Set objNetwork = CreateObject("WScript.Network")
strComputer = objNetwork.ComputerName
Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!//" & _
strComputer & "/root/cimv2:Win32_ComputerSystem.Name='" & _
strComputer & "'")

ReturnValue = objComputer.JoinDomainOrWorkGroup(strDomain, _
strPassword, strDomain & "\" & strUser, strOU, _
JOIN_DOMAIN + ACCT_CREATE)
If Not ReturnValue = 0 Then ' if the joining fails
Wscript.Echo "コンピュータのドメインへの参加は失敗しました。管理者に問い合わせて手動でドメイン参加するか、再試行してください。OK をクリックすると説明が表示されます。"
Wscript.Echo "エラーの説明: 新ドメインコントローラーとの通信ができているか(IPSEC設定を行っている場合、参加させるコンピューターとドメインコントローラーは通信できる状態か)、DNSアドレスが正しく変更されているか、nslookupコマンドでドメインコントローラーの名前解決が出来るか、ping疎通ができているか、現在はワークグループ環境か、このコンピュータのIPアドレスは正しいか、所属変更先ドメインに同じコンピュータ名が存在していないか、を確認してください。再試行を行う前にコンピュータの再起動を行ってください。" & Err.Description
Wscript.Quit
Else
Wscript.echo "このコンピュータは正常にドメイン参加しました。OK をクリックすると自動的に再起動します。"
END If
WScript.sleep(5000)

Set objComputer = GetObject("LDAP://cn=VISTATEST-PC,OU=TestGroup,dc=nekoserver,dc=local")
objComputer.AccountDisabled = True
objComputer.SetInfo
Wscript.Echo "所属変更前ドメイン上のコンピュータアカウントは無効になりました。"

Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate,(Shutdown)}!\\" & _
strComputer & "\root\cimv2")

Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")

For Each objOperatingSystem in colOperatingSystems
objOperatingSystem.Reboot()
Next
 
----------------------------------------------------- 
これでWindows VISTA, Windows 7クライアントは2008ドメインに参加(所属変更)できる。

説明:
①まず、参照するDNSを置き換える
 成功・失敗それぞれに対しメッセージを表示させるようにした。
②置き換えたDNSサーバー名に対してPingを飛ばして疎通確認
 失敗したらエラーが返ってくる。成功時は何も表示しない。
③今現在のドメインから離れる(ワークグループ化)
 メッセージなし。紛らわしくなるから。
 所属変更なら、そのまま参加のスクリプトでもいいんだろうけど…
④そのまま再起動せずに新ドメインへ参加
 ほんとうはしたほうがいいけど面倒なので…
⑤ローカルadministrator アカウントの無効化
⑥旧ドメインnekoserver.local上のクライアントコンピュータアカウント
 VISTATEST-PC を無効化
⑦自動的に再起動を行う。
 
 

----------------------------------------------------------
ドメイン参加失敗の原因は以下の状況が想定されます。

・入力したドメイン名またはドメイン管理者ユーザー名・パスワード
・コマンドプロンプトから正常にpingが飛ぶかどうか
・クライアントのIPアドレスが旧ドメインのものではないか
・クライアントOSによってスクリプト内を書き換えたかどうか
・33行目の書き換え 
・⑥で失敗する場合はDNSの参照に問題があるので、新サーバのDNSサーバ上に旧サーバのDNSを追加するか、11行目に旧ドメインのDNSアドレスを追加しておく。(旧DNSが不要なら後で削除しておく。ココもスクリプトを使うなら10~18行目までを77行目あたりの空白部分にコピペして新サーバのDNSのみにすればよい)
 
 
 
----------------------------------------------------------
次の条件は
・クライアントOS:XP「XPTEST-PC」
・2003ドメイン「nekoserver.local」から2008ドメイン「nekoprint.local」に所属変更だけを行う (移行ではない)
・ほかは同条件
 
 

On Error Resume Next

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNetCards = objWMIService.ExecQuery _
("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")

For Each objNetCard in colNetCards
arrDNSServers = Array("10.10.1.9","10.10.1.10")
objNetCard.SetDNSServerSearchOrder(arrDNSServers)
If errEnable = 0 Then
WScript.Echo "DNSアドレスは正常に変更されました"
Else
WScript.Echo "DNSアドレスの変更ができませんでした。管理者まで問い合わせてください。"
End If
Next

strMachines = "dc1.nekoprint.local"
aMachines = split(strMachines, ";")
For Each machine in aMachines
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
ExecQuery("select * from Win32_PingStatus where address = '"_
& machine & "'")
For Each objStatus in objPing
If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>0 Then
WScript.Echo("コンピューター " & machine & " への ping疎通確認ができません。通信に失敗しました。")
End If
Next
Next

Const NETSETUP_ACCT_DELETE = 2 'Disables computer account in domain.
strPassword = "********"
strUser = "administrator"

Set objNetwork = CreateObject("WScript.Network")
strComputer = objNetwork.ComputerName

Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & _
strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & strComputer & "'")
strDomain = objComputer.Domain
intReturn = objComputer.UnjoinDomainOrWorkgroup _
(strPassword, strDomain & "\" & strUser, NETSETUP_ACCT_DELETE)

Dim strUser, strPassword, strDomain
Const JOIN_DOMAIN = 1
Const ACCT_CREATE = 2
Const ACCT_DELETE = 4
Const WIN9X_UPGRADE = 16
Const DOMAIN_JOIN_IF_JOINED = 32
Const JOIN_UNSECURE = 64
Const MACHINE_PASSWORD_PASSED = 128
Const DEFERRED_SPN_SET = 256
Const INSTALL_INVOCATION = 262144
strDomain = "nekoprint.local"
strOU = "OU=TestGroup,DC=nekoprint,DC=local"
strUser = "administrator"
strPassword = "********"

Set objNetwork = CreateObject("WScript.Network")
strComputer = objNetwork.ComputerName
Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!//" & _
strComputer & "/root/cimv2:Win32_ComputerSystem.Name='" & _
strComputer & "'")

ReturnValue = objComputer.JoinDomainOrWorkGroup(strDomain, _
strPassword, strDomain & "\" & strUser, strOU, _
JOIN_DOMAIN + ACCT_CREATE)
If Not ReturnValue = 0 Then ' if the joining fails
Wscript.Echo "コンピュータのドメインへの参加は失敗しました。管理者に問い合わせて手動でドメイン参加するか、再試行してください。OK をクリックすると説明が表示されます。"
Wscript.Echo "エラーの説明: 新ドメインコントローラーとの通信ができているか(IPSEC設定を行っている場合、参加させるコンピューターとドメインコントローラーは通信できる状態か)、DNSアドレスが正しく変更されているか、nslookupコマンドでドメインコントローラーの名前解決が出来るか、ping疎通ができているか、現在はワークグループ環境か、このコンピュータのIPアドレスは正しいか、所属変更先ドメインに同じコンピュータ名が存在していないか、を確認してください。再試行を行う前にコンピュータの再起動を行ってください。" & Err.Description
Wscript.Quit
Else
Wscript.echo "このコンピュータは正常にドメイン参加しました。OK をクリックすると自動的に再起動します。"
END If
WScript.sleep(5000)

Set objComputer = GetObject("LDAP://cn=XPTEST-PC,OU=TestGroup,dc=nekoserver,dc=local")
objComputer.AccountDisabled = True
objComputer.SetInfo
Wscript.Echo "所属変更前ドメイン上のコンピュータアカウントは無効になりました。"

Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate,(Shutdown)}!\\" & _
strComputer & "\root\cimv2")

Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")

For Each objOperatingSystem in colOperatingSystems
objOperatingSystem.Reboot()
Next
 
----------------------------------------------------------
 
二つの違いはクライアントOSによって33行目を変更したかどうか、だ

XP/2003…NETSETUP
VISTA/2008/7/2008R2…NETCENTER
 
 
----------------------------------------------------------
では次の条件
・クライアントOS:XP
・2008ドメイン「nekoserver.local」に参加すみ
・2008別ドメイン「nekoprint.local」に所属変更(移行ではない)
・ほかは同条件
 
このスクリプトの33行目は、2003 -> 2008のときと同様、変更せずとも問題はない。
Const NETSETUP_ACCT_DELETE = 2 'Disables computer account in domain.
 
 
----------------------------------------------------------
次はちょっとてこずったが。
・クライアントOS:XP「XPTEST-PC」
・2008ドメイン「nekoserver.local」に参加済み
・2003ドメイン「nekoprint.local」への所属変更
・ほかは同条件

これは上記と同じようなスクリプトの内容でいいのだが、
強制的にワークグループにされてしまう場合があるので
そんな時の再参加用の別スクリプトを用意した。
まあ、大抵は問題なく動作するのだが。

Dim strUser, strPassword, strDomain
Const JOIN_DOMAIN = 1
Const ACCT_CREATE = 2
Const ACCT_DELETE = 4
Const WIN9X_UPGRADE = 16
Const DOMAIN_JOIN_IF_JOINED = 32
Const JOIN_UNSECURE = 64
Const MACHINE_PASSWORD_PASSED = 128
Const DEFERRED_SPN_SET = 256
Const INSTALL_INVOCATION = 262144
strDomain = "nekoprint.local"
strUser = "administrator"
strPassword = "********"

Set objNetwork = CreateObject("WScript.Network")
strComputer = objNetwork.ComputerName
Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!//" & _
strComputer & "/root/cimv2:Win32_ComputerSystem.Name='" & _
strComputer & "'")

ReturnValue = objComputer.JoinDomainOrWorkGroup(strDomain, _
strPassword, strDomain & "\" & strUser, strOU, _
JOIN_DOMAIN + ACCT_CREATE)
If Not ReturnValue = 0 Then ' if the joining fails
Wscript.Echo "コンピュータのドメインへの参加は失敗しました。管理者に問い合わせて手動でドメイン参加するか、再試行してください。OK をクリックすると説明が表示されます。"
Wscript.Echo "エラーの説明: 新ドメインコントローラーとの通信ができているか(IPSEC設定を行っている場合、参加させるコンピューターとドメインコントローラーは通信できる状態か)、DNSアドレスが正しく変更されているか、nslookupコマンドでドメインコントローラーの名前解決が出来るか、ping疎通ができているか、現在はワークグループ環境か、このコンピュータのIPアドレスは正しいか、所属変更先ドメインに同じコンピュータ名が存在していないか、を確認してください。再試行を行う前にコンピュータの再起動を行ってください。" & Err.Description
Wscript.Quit
Else
Wscript.echo "このコンピュータは正常にドメイン参加しました。OK をクリックすると自動的に再起動します。"
END If
WScript.sleep(5000)

Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate,(Shutdown)}!\\" & _
strComputer & "\root\cimv2")

Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")

For Each objOperatingSystem in colOperatingSystems
objOperatingSystem.Reboot()
Next

 
--------------------------------------------------
ドメインから離脱する場合
--------------------------------------------------
※クライアントは、Windows VISTA, Windows 7 以降用。
 XP/2003の場合は、1行目の【NETSCENTER】 を、【NETSETUP】 に置き換える。
 設定は以下のとおり。
 
  参加中のドメイン= nekoprint.local
  OU= TestGroup
  ドメイン管理者名= administrator
  ドメインの管理者パスワード= ********
  クライアントコンピューター名= administrator11 
  離脱後のワークグループ名は、ドメイン名と同一。 
  ドメインコンピュータアカウントを無効化する。(確認あり)
  5秒後、再起動させる。
    
 
 
Const NETCENTER_ACCT_DELETE = 2 'Disables computer account in domain.

Set objNetwork = CreateObject("WScript.Network")
strComputer = objNetwork.ComputerName

Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & _
strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & strComputer & "'")
strDomain = objComputer.Domain
intReturn = objComputer.UnjoinDomainOrWorkgroup _

Set objNetwork = CreateObject("Wscript.Network")
strComputer = objNetwork.ComputerName
Set objComputer = GetObject("LDAP://cn=administrator11,OU=TestGroup,dc=nekoprint,dc=local")
If objComputer.AccountDisabled Then
Wscript.Echo "コンピュータアカウントはすでに無効になっています。OKをクリックすると5秒後に再起動します。"
Else
objComputer.AccountDisabled = True
objComputer.SetInfo
Wscript.Echo "OKをクリックすると、ドメイン上のコンピュータアカウントを無効化し、5秒後に再起動します。"

Set objNetwork = CreateObject("WScript.Network")
strComputer = objNetwork.ComputerName
Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!//" & _
strComputer & "/root/cimv2:Win32_ComputerSystem.Name='" & _
strComputer & "'")

WScript.sleep(5000)

Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate,(Shutdown)}!\\" & _
strComputer & "\root\cimv2")

Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")

For Each objOperatingSystem in colOperatingSystems
objOperatingSystem.Reboot()
Next

End If 

※ココ、おかしな話なのですが、Windows 7 において、1行目の【NETCENTER】の部分を、
 【NETSETUP】 にしても動くのですが、再起動してもドメイン離脱できていないんですよね…
 あと、ドメインコントローラー側のGUI上では、無効化されているのに、ログオンできるとかね…
 
 また、Windows XP については、【NETCENTER】 のままだと、コンピューターアカウントの無効化はされるが、
 再起動処理をしてくれなくなくなることを確認しています。
 (ドメイン離脱は出来ている)

 こういう動作も1行目を正しく設定すれば上記の様にはならないので、1行目は絶対に気をつけるところです。
 
 
 
 
--------------------------------------
・ワークグループからドメイン参加する 
--------------------------------------
といってもDNS変更と、ping疎通確認と、自動再起動設定はしていますが。
 設定は以下のとおり。
 
  現在の状態= ワークグループ
  参加したいドメイン名= nekoprint.local
  ドメイン管理者名= administrator
  ドメインの管理者パスワード= ********
  DNSサーバーアドレス= 10.10.10.1 10.10.10.2
  OU= TestGroup に所属させる予定
  クライアントコンピューター名= administrator11 
   
 
 
On Error Resume Next

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNetCards = objWMIService.ExecQuery _
("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")

For Each objNetCard in colNetCards
arrDNSServers = Array("10.10.10.1","10.10.10.2")
objNetCard.SetDNSServerSearchOrder(arrDNSServers)
If errEnable = 0 Then
WScript.Echo "DNSアドレスは正常に変更されました"
Else
WScript.Echo "DNSアドレスの変更ができませんでした。管理者まで問い合わせてください。"
End If
Next

strMachines = "10.10.10.1"
aMachines = split(strMachines, ";")
For Each machine in aMachines
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
ExecQuery("select * from Win32_PingStatus where address = '"_
& machine & "'")
For Each objStatus in objPing
If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>0 Then
WScript.Echo("コンピューター " & machine & " への ping疎通確認ができません。通信に失敗しました。")
End If
Next
Next

Dim strUser, strPassword, strDomain
Const JOIN_DOMAIN = 1
Const ACCT_CREATE = 2
Const ACCT_DELETE = 4
Const WIN9X_UPGRADE = 16
Const DOMAIN_JOIN_IF_JOINED = 32
Const JOIN_UNSECURE = 64
Const MACHINE_PASSWORD_PASSED = 128
Const DEFERRED_SPN_SET = 256
Const INSTALL_INVOCATION = 262144
strDomain = "nekoprint.local"
strOU = "OU=testgroup,DC=nekoprint,DC=local"
strUser = "administrator"
strPassword = "********"

Set objNetwork = CreateObject("WScript.Network")
strComputer = objNetwork.ComputerName
Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!//" & _
strComputer & "/root/cimv2:Win32_ComputerSystem.Name='" & _
strComputer & "'")

ReturnValue = objComputer.JoinDomainOrWorkGroup(strDomain, _
strPassword, strDomain & "\" & strUser, strOU, _
JOIN_DOMAIN + ACCT_CREATE)
If Not ReturnValue = 0 Then ' if the joining fails
Wscript.Echo "コンピュータのドメインへの参加は失敗しました。管理者に問い合わせて手動でドメイン参加するか、再試行してください。OK をクリックすると説明が表示されます。"
Wscript.Echo "エラーの説明: 新ドメインコントローラーとの通信ができているか(IPSEC設定を行っている場合、参加させるコンピューターとドメインコントローラーは通信できる状態か)、DNSアドレスが正しく変更されているか、nslookupコマンドでドメインコントローラーの名前解決が出来るか、ping疎通ができているか、現在はワークグループ環境か、このコンピュータのIPアドレスは正しいか、所属変更先ドメインに同じコンピュータ名が存在していないか、を確認してください。再試行を行う前にコンピュータの再起動を行ってください。" & Err.Description
Wscript.Quit
Else
Wscript.echo "このコンピュータは正常にドメイン参加しました。OKをクリックすると5秒後に再起動します。"
END If
WScript.sleep(5000)


Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate,(Shutdown)}!\\" & _
strComputer & "\root\cimv2")

Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")

For Each objOperatingSystem in colOperatingSystems
objOperatingSystem.Reboot()
Next

--------------------------------------
内容:
※Windows 7 クライアントが、Windows Server 2003ドメインに参加する場合。
 ・DNSサーバーアドレスの変更(10.10.10.1と、10.10.10.2)
 ・ping疎通確認(10.10.10.1)
 ・ローカルPC(ドメイン所属なし)からドメイン 【nekoprint.local】 へ参加。
 ・ドメイン参加と同時に 【OU=testgroup】 へ所属させる。 
 ・5秒後、再起動

 
--------------------------------------
総合した結果?
--------------------------------------
・XP/2003 コンピュータをドメインから離脱させる場合、
 33行目は「Const NETSETUP_ACCT_DELETE = 2 'Disables computer account in domain.」を使用。
・VISTA/2008/7/2008R2/2012 コンピュータをドメインから離脱させる場合は、
 33行目を「Const NETCENTER_ACCT_DELETE = 2 'Disables computer account in domain.」に置き換える。
・ワークグループになってしまう原因やスクリプトが動作しないときは、やはり33行目の記述ミスの場合が多い。
・Pingは、クライアント側からDNSサーバーの名前解決が出来ているかどうかを確認するものなので、IPアドレスでの確認はしないこと。
・44行目、前から質問いただいていたのですがココは書式を以前のものを書いておりまして、
 そのために括弧でくくっただけなので…紛らわしくてすいません、ココは削除でかまわないです。
 自分のようなヘタレが書いたショボいブログだし、書式としてなりたってないのに、
 コレで考えられるとは正直思わなかったです…
 (strPassword, strDomain & "\" & strUser, NETSETUP_ACCT_DELETE)
・ドメインコントローラーは、Windows 2000 Server以降ならすべて対応している。
・所属変更したときに、旧ドメインに作成されたコンピューターアカウントが無効になっていない場合は、
 スクリプトを使う前に旧サーバーへログオンした状態であるか、
 またはDNS参照が出来ていない可能性がある。
・Windows Server 2012 がドメインコントローラーだった場合に関して少し違うところがあったといえば、
 56行目のドメイン参加の部分 【strDomain = "nekoprint.local"】 の部分だけですね。
 ここは、"nekoprint.local" <- 【.local】 がダメなようで、"nekoprint" にしないと動かなかったです。
 メンバーサーバーにする場合には、上記スクリプトでなんら問題はなかったですね。
・nslookup コマンドを使い、ドメインコントローラーの名前解決が出来るかどうか(クライアント側からコマンドを実行する)
・IPSEC設定の見直し(ドメイン側もしくは参加させるパソコン側で設定を行っている場合)
・スクリプトを実行した際に失敗する場合は、コマンドプロンプト(管理者として実行)を起動し、コマンドからスクリプトを実行してください。
 
 
とまあ、いろいろありますが、要するに「NETCENTER」や「NETSETUP」は、
「ネットワークと共有センター」や「ネットワークのセットアップウィザード」に直結している。つまりドメイン参加は…アレですね。

こんな感じで無理やり作ったスクリプトでも動作確認はできたのでこれを使おうと思います。
けっこうハマったのは実は離脱だったりしますが。 

あとの課題はOUですね。ドメイン参加させてから、
別でOU移動のスクリプトでよかったんだろうけど…

ページ移動