robocopyでデータコピーするPowerShellスクリプト
バックアップとか移行とかで使用するスクリプトをPowershellで作ってみたよ。
・sourceとdestinationはプロンプト入力形式
・ループ処理で繰り返しsourceとdestinationを変えてコピー処理可能
・データコピーにはrobocopyコマンドを使用
・Lite Versionはデフォルトのデータ、属性、タイムスタンプのみ(COPY/DAT)
・Full VersionはLiteバージョンに加え、セキュリティ情報、オーナー情報、監査情報もコピーする(COPY/ALL)
・Full Versionはログも出力
############################################################################
# File Name : robocp_Interactive_vxxx.ps1 - Data Copy by Robocopy
# Version 006
# Owner: hoge
# Date: 2019/12/23
#############################################################################
Get-Date
Write-Host "Process Start"
function CP_PROC
{
#日付を取得する
$SYSDATETIME = (Get-Date -Format "yyyyMMddHHmmss")
#コピー場所と実行パラメーターの設定
$SRC = Read-Host "Please Input Source Place"
$DST = Read-Host "Please Input Destination Place"
$ACT = Read-Host "[1] Mirror / [2] COPY ONLY / [3] TEST"
#スクリプト保存場所取得
#$MYDIR = Split-Path $myInvocation.ScriptName #フォルダ
$LOGFILE = $script:myInvocation.MyCommand.path #フルパス
#出力ログファイル
#$LOGFILE = $MYDIR + "\robocp_log-" + $SYSDATETIME + ".log"
$LOGFILE = $LOGFILE.Replace(".ps1","")
$LOGFILE = $LOGFILE + "_log-" + $SYSDATETIME + ".log"
Write-Host "*************************************************************************"
Switch($ACT)
{
1 { Write-Host "#### MIRROR ####" ; break }
2 { Write-Host "#### COPY ####" ; break }
3 { Write-Host "#### TEST ####" ; break }
default { Write-Host "not expected $ACT$ !" }
}
Write-Host "*************************************************************************"
# Lite Version
if($ACT -eq 1)
{
# Start-Transcript $LOGFILE
robocopy $SRC $DST /MT:8 /DCOPY:T /Z /MIR /R:3 /W:2
}
elseif($ACT -eq 2)
{
robocopy ${SRC} ${DST} /MT:8 /DCOPY:T /Z /E /R:3 /W:2
}
elseif($ACT -eq 3)
{
robocopy $SRC $DST /MT:8 /DCOPY:T /Z /S /R:3 /W:2 /NOCOPY
}
# Full Version
<# if($ACT -eq 1)
{
robocopy $SRC $DST /V /X /MT:2 /TEE /COPYALL /DCOPY:T /TEE /ZB /MIR /R:3 /W:2 /LOG+:$LOGFILE
}
elseif($ACT -eq 2)
{
robocopy $SRC $DST /V /X /MT:2 /TEE /COPYALL /DCOPY:T /TEE /ZB /E /R:3 /W:2 /LOG+:$LOGFILE
}
elseif($ACT -eq 3)
{
robocopy $SRC $DST /V /X /MT:2 /TEE /COPYALL /DCOPY:T /TEE /ZB /S /R:3 /W:2 /LOG+:$LOGFILE /NOCOPY
}
#>
# Stop-Transcript
#終了時ポップアップ
$wsobj = new-object -comobject wscript.shell
$result = $wsobj.popup("robocopy処理が完了しました",0,"robocp",1)
}
#開始処理
do{
#処理内容設定
Write-Host ""
$PFLAG = Read-Host "[1] Copy Start / [2] Copy End"
if($PFLAG -eq 1)
{
#変数初期化
$SRC = ""
$DST = ""
$ACT = ""
CP_PROC
}
elseif($PFLAG -eq 2)
{
break
}
else
{
Write-Host "not expected $PFLAG !"
}
}while($PFLAG -ne 2)
Write-Host ""
Get-Date
Write-Host "Process End"
ファイルもアップロードしておくよ。
以上。