日次で作成するバックアップなど、一定期間を超過したら削除するファイルの管理で利用します。
タスクスケジューラーで実行可能です。
####################################################################
## 本番環境に合わせて設定する項目
# 削除対象フォルダ
$dir ="対象のフォルダパス(フルパス)を記載";
# 削除対象 拡張子フィルター 特にない場合は*.*を設定
$ext ="*.*";
# ログファイル(フルパス)を指定
$LogFile ="保存先フォルダを記載\"+ (Get-Date -Format "yyyyMMdd")+".log"
####################################################################
$TargetDate = Get-Date
$TargetDate = $TargetDate.AddYears(-1); # 1年以上前のファイルを削除する場合
$TargetDate = $TargetDate.AddMonths(-1); # 1ヶ月以上前のファイルを削除する場合
echo "実行ログ" >$LogFile
echo "---------------------------------------------------" >>$LogFile
echo "削除対象のファイル" >>$LogFile
$tmp= "更新日時<" + $TargetDate.ToString("yyyy/MM/dd HH:mm:ss")
echo $tmp >>$LogFile
echo "削除対象のフォルダ" >>$LogFile
echo $dir >>$LogFile
echo "---------------------------------------------------" >>$LogFile
#対象フォルダだけ削除対象の場合
$list = Get-ChildItem $dir -File -Filter $ext ;
#配下フォルダも削除対象の場合
# Depthは、階層の深さ。以下例だと3階層下までファイルをチェックしてくれる。
#$list = Get-ChildItem $dir -File -Filter $ext -Recurse -Depth 3;
$cnt = [int]0;
foreach($fileAt in $list)
{
$tmp = $fileAt.LastWriteTime.ToString("yyyyMMdd_HHmmss")+" "+$fileAt.Name
if( $TargetDate.CompareTo($fileAt.LastWriteTime) -gt 0)
{
"【削除】"+$tmp >>$LogFile
Remove-Item $fileAt.FullName -Force
$cnt++;
}
}
echo "---------------------------------------------------" >>$LogFile
$tmp = "削除件数:"+$cnt.ToString();
echo $tmp >>$LogFile
echo "完了" >>$LogFile