Office365ディレクトリ手動同期スクリプト(リモート / WSH)

リモートで手動ディレクトリ同期の実行命令を出すスクリプトです。ディレクトリ同期サーバにPowerShell2.0を入れるのが一番楽な気もしますが、なるべくデフォルトのMicrosoftの環境をいじらないというポリシーなら、ということで。

ログインアカウントの権限にてディレクトリ同期を実行します。事前に以下のパラメータを変更しておきます。GUIDは、Identity ManagerのManagement Agentsを開いて【Configure Run Profiles】メニューで適切な同期メニューをクリックして【Script】出力した中に入ってます。

13L : dir-sync.example.com → ディレクトリ同期サーバのコンピュータ名に変更
24L : XXXXXXXX-XXXX-X… → SourceADのGUIDに変更
29L : YYYYYYYY-YYYY-Y… → TargetWebServiceのGUIDに変更

RemoteDirSync.vbs

'####################################################################
'# Office365 ディレクトリ同期 手動同期リモート実行スクリプト(WSH版)
'#
'# 使用法: C:> cscript RemoteDirSync.vbs
'# ※ディレクトリ同期管理者のドメインアカウント(MIIS_Adminsの
'#  メンバー)にて実行すること
'#
'####################################################################

Option Explicit

Dim strComputer
strComputer = "dir-sync.example.com"

ForceDirSync strComputer
WScript.Echo vbCrlf & "o365 Directory Sync Complete!"

Sub ForceDirSync( strComputer )
  Dim Locator, WMIService
  Dim MA, MASet
  Const PktPrivacy = 6
  Set WMIService = GetObject ( "winmgmts://" & strComputer & "/root/MicrosoftIdentityIntegrationServer" )
  WMIService.Security_.AuthenticationLevel = PktPrivacy
  Set MASet   = WMIService.ExecQuery("select * from MIIS_ManagementAgent where Guid = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'")
    for each MA in MASet
        WScript.Echo "Running " + MA.name + ".Execute(""Delta Import Delta Sync"")..."
        WScript.Echo "Run completed with result: " + MA.Execute("Delta Import Delta Sync")
    next
    Set MASet   = WMIService.ExecQuery("select * from MIIS_ManagementAgent where Guid = '{YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY}'")
    for each MA in MASet
        WScript.Echo "Running " + MA.name + ".Execute(""Delta Confirming Import"")..."
        WScript.Echo "Run completed with result: " + MA.Execute("Delta Confirming Import")
        WScript.Echo "Running " + MA.name + ".Execute(""Export"")..."
        WScript.Echo "Run completed with result: " + MA.Execute("Export")
    next
End Sub

ログインユーザと違うアカウントで実行したければ、

Option Explicit

Dim strComputer, strUser, strPassword
strComputer = "dir-sync.example.com"
strUser = "Administrator"
strPassword = "P@ssw0rd"

ForceDirSync strComputer, strUser, strPassword
WScript.Echo vbCrlf & "o365 Directory Sync Complete!"
'ListShares strComputer, strUser, strPassword
'WScript.Echo vbCrlf & "Ready."

Sub ForceDirSync( strComputer, strUser, strPassword )
  Dim strObject
  Dim Locator, WMIService, objShare
  Dim MA, MASet
  Const PktPrivacy = 6
  Set Locator = CreateObject( "WbemScripting.SWbemLocator" )
  Set WMIService = Locator.ConnectServer ( strComputer, "root/MicrosoftIdentityIntegrationServer", strUser, strPassword )
  WMIService.Security_.AuthenticationLevel = PktPrivacy
  Set MASet   = WMIService.ExecQuery("select * from MIIS_ManagementAgent where Guid = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'")
  for each MA in MASet
    WScript.Echo "Running " + MA.name + ".Execute(""Delta Import Delta Sync"")..."
    WScript.Echo "Run completed with result: " + MA.Execute("Delta Import Delta Sync")
  next
  Set MASet   = WMIService.ExecQuery("select * from MIIS_ManagementAgent where Guid = '{YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY}'")
  for each MA in MASet
    WScript.Echo "Running " + MA.name + ".Execute(""Delta Confirming Import"")..."
    WScript.Echo "Run completed with result: " + MA.Execute("Delta Confirming Import")
    WScript.Echo "Running " + MA.name + ".Execute(""Export"")..."
    WScript.Echo "Run completed with result: " + MA.Execute("Export")
  next
End Sub

とかですかね? 出力したScriptやこの辺りを参照にしてご自身の環境に合わせて修正して下さい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です