UWSCを使ってみた。

前回の続きで、Windows系のサブネットを一括変更するツールを作ろうといろいろ調べてみました。
まずは、コマンドプロンプトなどで、
netsh interface ip show addres
を打ち、その出力から変更対象のネットワーク設定を取得し、それを元に、
netsh interface ip set address “ネットワーク名” static 192.168.1.101 255.255.254.0 192.168.1.1
といったネットワーク変更コマンドを発行するスクリプトを作ります。
 それをリモートから実行するのには、そのスクリプトをリモートマシンに配置して実行するという事なりますが、まずやってみたのがPsExec。net use でスクリプトをリモートマシンへコピーしてPsExecで実行するという内容ですが、2012Serverだとデフォルトではnet useもPsExecもFirewallで弾かれてしまいます。Firewallを無効にするとうまくいくのですが、Firewallとかセキュリティポリシーとか変えなきゃいけないならそれは本末転倒になってしまいます。
 結果、行きついたのが、UWSC。大抵のWindows系サーバはメンテナンスの都合でリモートデスクトップだけは有効になっているので、リモデ経由の作業を自動化するにはと発想を変えてUWSCを見つけました。下記を参考にさせて頂きました。

UWSCによるリモートデスクトップの一括自動操作スクリプト

微妙に2012ServerR2用のGUI操作に変更して使ってみました。
でも、結果的にはコマンドのみで完結しない作業だし、実行結果の証跡確保や確実性を求められる内容なので、やっぱり手作業が必要になってしまいました。ダイアログを出して手作業が終わったらボタンを押すみたいな。。
Windows系OS作業の自動化はインフラ側でそれに合わせた設定が事前にされてないと無理ですね。

TeraTermマクロでvi編集

 マシンが増えたのでサブネットを多数のサーバで一気に変えなきゃという話があり、対象サーバを確認したところ、Windows系もあるけどCentOSの6系が多いとの事。サブネットを変えるにはどうしたらいいのかいろいろ調べたと所、CentOS6だと一時的なのはifconfigで行けるけど、恒久的な変更だとコンフィグファイル更新が必要らしい。ちなみにCentOS7だとまた別のコマンドらしい。windows系は調査中。。。
 という事でリモート端末から一気に複数のサーバを更新するという要件なので、とりあえずはTeraTermマクロを作ってそれを各サーバに繰り返すという形にします。
 下記例はログインや引数処理、該当ネットワーク名の取得等は割愛し、viコマンドによるファイル編集をマクロで実行する箇所をサブルーチンにし、それをコールする内容です。コンフィグファイルは/etc/syscomfigにある該当ネットワークのファイル(下記のCONFFILE)に指定し、検索文字列(下記のSEARCHSTR)はPREFIX=、サブネットをBit24にするとして上書文字列(下記のAPPENDSTR)に24をセットしてサブルーチンをコールしています。

コマンド打った後にwaitlnとかでは出来ないのでpauseを入れてとりあえずは動く形になりましたが、環境によりタイミングは変わるのでエラーハンドリングを追加した方が良さそうです。