普通のシステムエンジニアの備忘録

きみひで と言います。個人勉強で触れた技術など備忘禄と時々日常を綴ります。

PowerShell 定期的にフォルダをZIP化して対比しておくソース

日次でファイルのアーカイブしなきゃいけなくなったので作成したPowershell

 

FileArchiveList.confを用意

 

以下ソースー----------------------

#定期的にフォルダをZIP化して対比しておくソース

#イベントログを書き出す関数
function writeEventlog([String]$LEVEL, [String]$MESSAGE){

}


$deletetime = Get-Date
$nametime = Get-Date -UFormat "%Y%m%d"
#対象フォルダリスト
$ConfFile = "C:\Users\user\Desktop\wk\20220630\FileArchiveList.conf"
#zipファイルの移動先フォルダ
$movepath = "C:\Users\user\Desktop\wk\20220630\moveTo"
#0:正常、1:異常
$SHELLRET = 0 


#main
writeEventlog "INFO" ("start")
writeEventlog "INFO" ("ConfigFile=" + $ConfFile)


#対象フォルダリスト読み込み
$ArchiveList = Get-Content $ConfFile

foreach($Confline in $ArchiveList){
    if($Confline -match "^$"){ continue }
    if($Confline -match "^#"){ continue }

    try{
        #コピーフォルダ
        $copypathFrom = $Confline
        $copypathTo  = $copypathFrom + "_" + $nametime
        $copypathToZip = $copypathTo + ".zip"
        $copypathToDummyFile = $copypathTo + "\" + $nametime

        #フォルダコピー
        Copy-Item $copypathFrom -destination $copypathTo -recurse

        echo $copypathToDummyFile 
        #ダミーファイル作成
        Out-File $copypathToDummyFile

        #ZIP圧縮
        Compress-Archive -Path $copypathTo -DestinationPath $copypathToZip

        #フォルダ削除
        Remove-Item -Path $copypathTo -Recurse

        #zipファイル移動
        Move-Item $copypathToZip $movepath 

        #古いファイル削除
        Get-ChildItem -Path $copypathFrom -Recurse | Where-Object{$_.LastWriteTime -lt $deletetime} | Remove-Item -Force #-WhatIf
    }catch{
        writeEventlog "ERROR" ("Archive error. RET=" + $RET_CMD + " Exception=" + $_.Exception)
        $SHELLRET = 1
    }

}

exit $SHELLRET