どの編でもいいのでITPro道場を受講いただいた方は道場で使っているスクリプトの有効性は感じていただいていると思います。で、今日は運用管理編に追加したドメイン参加のスクリプトをどう導き出したかをちょっと整理してみようと思いました。ここには免責事項は書きませんが、スクリプトセンターに準じます。
私の参照する先は TechNet のスクリプトセンター。カテゴリー別一覧のところを参照。スクリプト一覧から Active Directory、コンピュータアカウントと進む。コンピュータのドメインへの追加をチェック。
こんなスクリプトが書いてある。
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 = "FABRIKAM" strPassword = "ls4k5ywA" strUser = "shenalan" 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, _ NULL, _ JOIN_DOMAIN + ACCT_CREATE)
で、strDomain/strPassword/strUser の右辺を道場のものに置き換え。実行してみると再起動しない。。。
そこで、デスクトップ管理・スタートアップとシャットダウン・コンピュータの再起動から下記を入手。
strComputer = "atl-dc-01" 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
で、マージしてできたのがこれ。
Const JOIN_DOMAIN = 1Const ACCT_CREATE = 2Const ACCT_DELETE = 4Const WIN9X_UPGRADE = 16Const DOMAIN_JOIN_IF_JOINED = 32Const JOIN_UNSECURE = 64Const MACHINE_PASSWORD_PASSED = 128Const DEFERRED_SPN_SET = 256Const INSTALL_INVOCATION = 262144 strDomain = "EXAMPLE"strPassword = "P@ssw0rd"strUser = "administrator" 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, NULL, _ JOIN_DOMAIN + ACCT_CREATE)
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 PowerShell (旧称:Monad)でしょう。Windows上で動作するシェルでコマンドを使ってオブジェクト操作もできる優れものです。こちらに関してはIT雑誌に掲載されている少し前の田辺の記事や彼のブログを参照ください。
とにかくミスを防ぎ、時間を稼げる手技をうまく使いましょう!のススメでした。
P.S. Windows サーバークックブック もよろしく!