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"

ファイルもアップロードしておくよ。

以上。

この記事が気に入ったらサポートをしてみませんか?