昨日は、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のライセンス認証なども一括で投げることが可能となります。
ちょっとしたメンテナンスの時などでも活用してみてください。
スポンサーリンク


