どうも、ますのです。
今までbatで色々処理を作っていたのですが、先日「ADユーザのパスワード期限通知PowerShell」を作ってからPowerShellにお世話になっております。
出来ること一緒だし、汎用性高いからコピペでええやん^q^
ということでわりと最近はPowerShell利用頻度が増えている次第です。
指定フォルダ内のデータ配下で更新が指定日数経過したデータを削除したい!
今回はユーザから「共有フォルダ内のデータで14日経過している場合にデータを定期削除したい」という声が出てきたので作ったのです。
というよりも、これ、前回作った「ADユーザのパスワード期限通知PowerShell」内のログローテーションでやってたのでそのまま拝借したであります。
やりたいことの概要
- 14日経過したデータは全て削除する
- 指定フォルダ配下のフォルダ内も全て対象とする
- データは「PDFファイル」のみを対象とする
PowerShellのコード内容
#01.削除対象のデータと保存する期間(日数)を設定
$filedir = "c:\deletefolder\"
$DeleteFile = "*.pdf"
$DAYS = 14
#02.削除対象のlogファイル&保存先設定(削除データをlogとして残さない場合は不要)
# $logdir = "c:\log\"
# $logdate = Get-Date -Format "yyyy-MMdd-HHmm"
# $logfile = $logdate +"_deletefile.log"
#
# ****A.削除対象のデータをログとして保存する
# Get-ChildItem $filedir$DeleteFile -Recurse | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-1 * $DAYS))} > $logdir$logfile
#
# ****B.[A]のログ保存フォルダ内の階層で「ファイル」となるデータを[DAYS]よりも古いものを対象に全て削除する
# Get-ChildItem $logdir | Where-Object {($_.Mode -eq "-a----") -and ($_.LastWriteTime -lt (Get-Date).AddDays(-1 * $DAYS))} | Remove-Item -Recurse -force
#------------------------------------------------------------
#03.[DAYS]日更新されていないデータを削除する(フォルダ配下全て対象)
Get-ChildItem $filedir$DeleteFile -Recurse | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-1 * $DAYS))} | Remove-Item -Recurse -force
・削除対象のログがいらない場合は02の部分は不要であります。必要な人だけコメントアウトしてみてほしいです。
・指定フォルダ配下のみを対象としたい場合は
「Get-ChildItem」のオプション「-Recurse」を外して実行すると指定フォルダのみ対象になるであります!状況によってつけ外しすることで応用が利くと思うので適宜変更すると幸せになれるかもです。
▼「-Recurse」無し:直下フォルダ内の[Mode:-a—-]を抽出
・指定フォルダ配下のみを対象としたい場合は
「Get-ChildItem」のオプション「-Recurse」を外して実行すると指定フォルダのみ対象になるであります!状況によってつけ外しすることで応用が利くと思うので適宜変更すると幸せになれるかもです。
▼「-Recurse」無し:直下フォルダ内の[Mode:-a—-]を抽出
▼「-Recurse」有り:配下フォルダに存在する[Mode:-a—-]を抽出
ログローテーションのテンプレPowerShellの紹介
言うてもさっきのところでコメントアウトしてる内容であります。
動作は「削除対象フォルダ直下に存在するファイル全てを削除する」となります。
その他データを削除したくない場合は「$logdir = “c:\log\*.log”」等のワイルドカードで上手く回避してみてください。
#削除対象のlogファイル保存フォルダの設定
$logdir = "c:\log\"
#データ保存日数
$DAYS = 7
#ログデータの削除
Get-ChildItem $logdir | Where-Object {($_.Mode -eq "-a----") -and ($_.LastWriteTime -lt (Get-Date).AddDays(-1 * $DAYS))} | Remove-Item -Recurse -force
今回のPowerShellに関しては下記サイトを参考に作っています。
細かな点まで記載されてるので???というところがある際は確認してみると良いかもです。(他力本願)
Python勉強しようかなと思っていましたが、PowerShellでも整形やら出来るみたいですね。
これを機にPowerShellの勉強もしてみようと思った今日この頃であります。
これを機にPowerShellの勉強もしてみようと思った今日この頃であります。