大量のリモートサーバ(複数ドメイン)にファイルを配布する
300台程度のサーバー(複数ドメイン)にフォルダ・ファイルを配布する必要性が出てきたので作成。
1. 動作確認環境
- WindowsServer 2012R2 Std
- Powershell4.0
2. やりたいこと
- 別ドメインのリモートサーバの任意のフォルダ配下にフォルダ・ファイルを配布したい
- 配布先の指定にはUNCパスを用いたい(管理共有機能を用いる)
3. 処理の流れ
以下の処理を配布する資材単位で実行する。
一括して大量のサーバに資材を配布する場合は、CSVファイル等を作成し、配布先サーバ情報やログイン資格情報、配布資材情報を定義し、順次処理するようにすると良い。
- "net use"コマンドで配布先サーバの管理共有リソースにリモート接続
- "Copy-Item"コマンドレットで配布先サーバに資材配布
- "Get-ChildItem"コマンドレットで資材配布結果確認
- "net use /delete"コマンドでリモート接続削除
4. 実装例
以下に実装例を示す。(例外処理は割愛)
# 配布先サーバFQDN or IPアドレス $remote_server = "sampleserver01.hoge.local" # リモート接続マウントポイント $mount_point = "\\$hostname\d$" # ローカルサーバ上の配布元資材格納先フォルダ $src_path = "D:\work\installer\*" # 配布先サーバ上の資材格納先フォルダ $dst_path = "$mount_point\tmp\installer\" # ログインユーザ $user = "hoge\admin01" # ログインパス $pass = "password" # 1. 配布先サーバの管理共有リソースにリモート接続 net use $mount_point ("/user:$user") $pass # 2. 配布先サーバに資材配布 Invoke-Expression ("Copy-Item $src_path $dst_path -Force -Recurse") # 3. 資材配布結果確認 Get-ChildItem $dst_path # 4. リモート接続削除 net use /delete $mount_point
上記例では、ローカルサーバの"D:\work\installer"配下の全てのフォルダ・ファイルを、再帰的に配布先サーバの"D:\tmp\installer"フォルダ配下へコピーしている("Copy-Item"コマンドレットの"-Recurse"オプションを使用)。
上記例のインプットパラメータを予めCSVファイル等の外部ファイルに記載しておけば、それを入力として大量のサーバに任意の資材を配布できる。
他にも良い方法がありそうだけどとりあえずこれで事足りたので・・・。