複数のサーバへ一括でファイルを送信する方法

インフラ

今回は複数のサーバへ一括でファイルを送信する方法についての記事になります。
以外と重宝する場面が多かったので備忘録として残しておきます。

概要

今回行う方法はテキストファイルに送信するホスト名を記載し、そのテキストファイルに記載されている対象にファイルを送信する方法をとります。

前提条件

前提条件として、配布元の作業PCから配布先のサーバへはSMBでファイル共有できるものとします。

実行ファイルの作成

今回はPower shell を使用して作業を実施するので、PS1ファイルを作成します。
メモ帳を開いて以下のコマンドを記載し、「.ps1」形式で保存します。

転送用バッチ.ps1

#カレントディレクトリ移動
$path = Split-Path -Parent $MyInvocation.MyCommand.Path
Set-Location $path

#リスト一覧取得
$f = (Get-Content list.txt) -as [string[]]
$i=1

#転送元指定
$souce = "$path\転送対象ファイルはここへ"

転送処理(リストをすべて実行するまで繰り返し)
foreach ($l in $f) {
#転送先指定
$destination = "\$l\c$\Users\administrator\Desktop"

Write-Host $i : $l "へ転送します。"
Write-Host "転送中・・・"
mkdir $destination\アップデート > $null 
Robocopy /s /e /NP $souce $destination\アップデート > $null 

if($LASTEXITCODE.Count -eq 0){ 
    Write-Output "何も実施しませんでした... `r`n"

    }

 if($LASTEXITCODE.Count -eq 1){ 
    Write-Output "コピーが完了しました... `r`n"

    }

 if($LASTEXITCODE.Count -eq 2){ 
    Write-Output "余分なフォルダー、ファイルが確認されました... `r`n"

    }

 if($LASTEXITCODE.Count -eq 4){ 
    Write-Output "同じ名前で別の種類のファイルが存在しました... `r`n"

    }

 if($LASTEXITCODE.Count -eq 8){ 
    Write-Output "コピーに失敗しました... `r`n"

    }

 if($LASTEXITCODE.Count -eq 16){ 
    Write-Output "不正な因数が指定されました... `r`n"

    }

$i++

}

pause

また、このps1ファイルと同じ階層に「list.txt」を作成し、そちらに転送先のホスト名及びIPアドレスを記載します。複数ある際は改行していれます。

list.txt

ホスト1
ホスト2
ホスト3

そして最後に同じ階層に「転送対象ファイルはここへ」という名前のフォルダを作成します。

実行ファイルの動作について

実行ファイルを見れば分かると思いますが、一応解説します…
まず、実行ファイルを動かすとlist.txtを読み込みます。
その後、Robocopyコマンドを使用し、list.txtに記載されているものすべてに転送処理を行います。
転送元はデフォルトで「転送対象ファイルはここへ」になっています。環境に合わせて変更するのもいいかもしれません。
転送先はデフォルトでAdministratorのデスクトップになっています。こちらも環境に合わせて変えるといいかもしれないですね。

それでは

コメント

タイトルとURLをコピーしました