昨日は、PsExecを使ってlist.txtに記述したIPアドレスのPCを対象に
バッチを実行するスクリプトを紹介しました。
今回はマスタイメージを展開した後、
実際にホスト名、ドメイン参加を一斉に実行した方法を紹介します。
■ホスト名変更
ホスト名を変更するにあたり、MACアドレスとホスト名を紐づけたCSVファイルをあらかじめ用意します。
・maclist.csv (サンプル)
------------------------------------------------------------
MAC,HOST
AA-BB-CC-DD-EE-FF-GG,host1
HH-II-JJ-KK-LL-MM-NN,host2
:
------------------------------------------------------------
前回紹介したスクリプトから、少し手を加え
MACアドレスを参照し バッチを実行するPowerShellを用意しました。
■一括展開用 PowerShellスクリプト MACアドレス確認版
---------------------------------------------------------------------------------
$path = "<list.txtや、実行したいバッチファイルを配置してあるPath>" cd $path $log = "$path\log\domainadd.log" #logフォルダはあらかじめ用意しておいてください。 $txtname = "$path\list.txt" #リモート実行したいPCのIPアドレスリスト $filebat="$path\<実行バッチファイル>" #接続先PCで実行したいバッチ $maclist=@(Get-Content $path\maclist.csv | ConvertFrom-Csv) #ホスト名とMACアドレスが紐づいているリスト $u="<管理者アカウント>" $p="<パスワード>" $result = $null $result+=@(foreach($name in Get-Content $txtname){ #通信ができるものを選定 write-host $name 確認中 $ping = Test-Connection -ComputerName $name -Quiet -Count 1 if($ping -eq $true){ $name } }) if($result -eq $null){ "対象なし" exit } "対象" $result foreach($a in $result){ $b=getmac /s $a /u $u /p $p $flag="0" $maclist | %{ if($b -match "$($_.mac)"){ $flag="1" .\PsExec.exe -u $u -p $p -s \\$a /f /c $filebat $_.mac $a $_.host | Tee-Object -FilePath $log -Append } } if($flag -eq "0") { read-host $a はMACアドレスリストに存在しません } } read-host 処理終了します。Enter---------------------------------------------------------------------------------
ポイントは、getmacコマンドを使い対象PCのMACアドレスを確認した上で、
maclist.csvに書かれてあるホスト名を引数を渡す点にあります。
以下はホスト名変更のバッチ例です。
■ホスト名変更バッチ
---------------------------------------------------------------------------------
@echo off echo %1 echo %2 echo %3 echo --- hostname echo --- if not '%computername%'=='%1' ( echo ホスト名変更します。実行はEnter pause wmic computersystem where name="%computername%" call rename name="%3" echo Return Valueが0の場合成功。それ以外は失敗 echo 設定を完了するには再起動が必要です。キーを押すと再起動が始まります。 pause shutdown -r -t 0 ) else ( echo ホスト名は正しいです。 pause )---------------------------------------------------------------------------------
通常、ホスト名変更を行う場合、UACによるシステム権限が必要ですが
前回紹介したリモートUACの解除により、PsExecに引数-sをつけることで
System権限での実行が可能となり、ホスト名変更させることができます。
ちなみに-sをつけずに実行した場合は、
System権限を持っていないためRetturn Valueの値が5となりホスト名は変更されません。
実際実行すると、以下のような動作になります。
list.txtに記述されてあるIPを参照して、疎通できるもののみを対象とする |
MACアドレスに応じて、ホスト名変更。完了後再起動し、順次対象PCに対し処理が進む |
■ドメイン参加
PsExec一括スクリプトに関しては特に変更ありません。
実行バッチファイルを以下のものに差し替え、実行することで対象PCをドメイン参加させることができます。
■ドメイン参加バッチ
---------------------------------------------------------------------------------
実行バッチファイルを以下のものに差し替え、実行することで対象PCをドメイン参加させることができます。
■ドメイン参加バッチ
---------------------------------------------------------------------------------
@echo off hostname echo ドメイン参加します echo Enterを押してください pause wmic ComputerSystem WHERE "name='%computername%'" CALL JoinDomainOrWorkgroup Name="<ドメイン名>" Password="<ドメインパスワード>" Username="<ドメインアカウント>" FJoinOptions=3 echo 再起動します。Enterを押してください pause shutdown -r -t 0---------------------------------------------------------------------------------
■そのほか
バッチファイルで出来る処理がほぼ可能なので、
HKLMのレジストリ編集や、cscriptの呼び出しなども可能となります。
HKLMのレジストリ編集や、cscriptの呼び出しなども可能となります。
場合によっては、レジストリを編集してオートログイン化をしてもよいですし、
WindowsやOfficeのライセンス認証なども一括で投げることが可能となります。
WindowsやOfficeのライセンス認証なども一括で投げることが可能となります。
ちょっとしたメンテナンスの時などでも活用してみてください。
スポンサーリンク