share facebook facebook2 twitter menu hatena pocket slack

2014.08.13 WED

[powershell]ログファイル等のバックアップ・削除・S3アップロード

WRITTEN BY三浦 剛慈

cloudpack三浦 剛慈です。

windowサーバ用に、ローカルの指定ディレクトリ配下のファイルで指定期間を過ぎているものに対して、バックアップ(move)・削除・S3アップロードを行うスクリプトをpowershellで書きました。
ディレクトリファイルは対象外としています。
ログファイルのバックアップ処理等に利用出来ると思います。

ファイル名:fileOp.ps1

param
(
    [int   ]$days=0,
    [string]$SrcDirpath,
    [string]$DestDirpath,
    [string]$S3backetPath,
    [switch]$del,
    [switch]$mv,
    [switch]$s3up
)
function checkparam([string]$ldel,[string]$lmv,[string]$ls3up,[string]$lSrcDirpath,[string]$lDestDirpath,[string]$lS3backetPath)
{
    $optnum=0
    $ret=$True
    foreach($option in @($ldel,$lmv,$ls3up))
    {
        if($option -eq $True)
        {
            $optnum +=1
        }
    }
    if($optnum -ne 1)
    {
        Write-Host "[ERROR]-del,-mv,-s3up can not use together."
        $ret=$false
    }
    if($lSrcDirpath -eq "")
    {
        Write-Host "[ERROR]-SrcDirpath  must be used and set path string other than null"
        $ret=$false
    }
    if(($lDestDirpath -eq "") -and ($lmv -eq $True))
    {
        Write-Host "[ERROR]using -mv option, -DestDirpath must be used and set path string other than null"
        $ret=$false
    }
    if(($lS3backetPath -eq "") -and ($ls3up -eq $True))
    {
        Write-Host "[ERROR]using -s3up option, -S3backetPath must be used and set path string other than null"
        $ret=$false
    }
    return $ret
}

$isAwsinitialized=$false

if((checkparam $del $mv $s3up $SrcDirpath $DestDirpath $S3backetPath) -eq $false)
{
    exit
}


$Targetfiles=Get-ChildItem $SrcDirpath
foreach($Targetfile in $Targetfiles)
{
    $pastdate=((Get-Date)-$Targetfile.LastWriteTime).Days
    if($pastdate -gt $days -and $Targetfile.PsISContainer -ne $True)
    {
        if($del -eq $True)
        {
            $Targetfile.delete()
        }
        elseif($mv -eq $True)
        {
            Move-Item $Targetfile.FullName -Destination $DestDirpath
        }
        elseif($s3up -eq $True)
        {
            if($isAwsinitialized -ne $True)
            {
                Initialize-AWSDefaults -AccessKey XXXXXXXXXXX -SecretKey YYYYYYYYYYYYYY -Region ap-northeast-1
                $isAwsinitialized=$True
            }
            Write-S3Object -BucketName $S3backetPath -File $Targetfile.FullName -Key $Targetfile.Name -CannedACLName Private
        }
    }
}

赤色部のアクセスキー・シークレットキーは任意の値を書く必要があります。
(転記時注記 上記ソースの71行目: -AccessKey XXXXXXXXXXX -SecretKey YYYYYYYYYYYYYY)

使用例1:S3バックアップ

  • ファイル期限=1日
  • 対象ディレクトリ=C:work
  • S3バックアップパス=koujipstest/hoge1
PS C:UsersAdministrator>  .fileOp.ps1 -days 1 -s3up -SrcDirpath C:work -S3backetPath koujipstest/hoge1

使用例2:ローカルファイル削除

  • ファイル期限=1日
  • 対象ディレクトリ=C:work
PS C:UsersAdministrator> .fileOp.ps1 -days 1 -del -SrcDirpath C:work

使用例3:ローカルファイルバックアップ

  • ファイル期限=1日
  • 対象元ディレクトリ=C:work
  • 対象先ディレクトリ=C:backup
PS C:UsersAdministrator> .fileOp.ps1 -days 1 -mv -SrcDirpath  C:work -DestDirpath  C:backup

元記事は、こちら