この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
こんにちはミンです。
最近現場では一定期間を過ぎたログファイル削除処理を担当していて、それのUTテストのために境界値を満たす更新日付のテストダミーファイルを作成することが必要です。
ファイルの更新日付変更って調べたら、powershellのSet-ItemPropertyで変更できることを分かりました。そのままpowershellでテストダミーファイル作成便利ツールを作りました。
実行前にDドライブにsampleFile.logを用意すること、DドライブにtestDummyFilesフォルダがあることです。
実行結果は上記の画像のように一気に更新日付それぞれ189ファイルが作成されます。
皆さん、テストダミーファイル作成する時、こちらのソースをご参考になれれば幸いです。
最後に、初めてpowershellを書くので、ご指摘があれば、ぜひコメントで教えてください。
#更新日付の年、未来のファイルが削除されないことを確認するために2023を含む
$years = "2021", "2022", "2023"
#更新日付の月
$months = "03", "04", "05"
#更新日付の日
$days = "01", "02", "03"
$d = Get-Date
#更新日付の時
$hh="{0:D2}" -f $d.Hour
#更新日付の分
$mm00=$d.Minute
#更新日付の秒
$ss="{0:D2}" -f $d.Second
if($mm00 -le 2){
#00分01分02分の場合考慮していない
echo "03分以降実行してください。"
exit
}
#分単位の削除処理なので、分の境界値を作成
$mmM3="{0:D2}" -f ($mm00 - 3)
$mmM2="{0:D2}" -f ($mm00 - 2)
$mmM1="{0:D2}" -f ($mm00 - 1)
$mmP1="{0:D2}" -f ($mm00 + 1)
$mmP2="{0:D2}" -f ($mm00 + 2)
$mmP3="{0:D2}" -f ($mm00 + 3)
$hhmmssArray = @()
$hhmmssArray += $hh +":"+ $mmM3 +":"+ $ss
$hhmmssArray += $hh +":"+ $mmM2 +":"+ $ss
$hhmmssArray += $hh +":"+ $mmM1 +":"+ $ss
$hhmmssArray += $hh +":"+ $mm00 +":"+ $ss
$hhmmssArray += $hh +":"+ $mmP1 +":"+ $ss
$hhmmssArray += $hh +":"+ $mmP2 +":"+ $ss
$hhmmssArray += $hh +":"+ $mmP3 +":"+ $ss
$testDummyFileName = ""
$testDummyFileFullPath = ""
$testDummyFileTime = ""
$testDummyFileNameHHMMSS = ""
Foreach ($currentYear in $years) {
Foreach ($currentMonth in $months) {
Foreach ($currentDay in $days) {
Foreach ($currentHHMMSS in $hhmmssArray) {
#ダミーファイル名のHHMMSSを作成
$testDummyFileNameHHMMSS=$currentHHMMSS.replace(':','').Substring(0, 4)
#ダミーファイル名を作成
$testDummyFileName = "Access_" + $currentYear+$currentMonth+$currentDay+$testDummyFileNameHHMMSS + ".log"
#ダミーファイルフルパスを作成
$testDummyFileFullPath = "D:\testDummyFiles\" + $testDummyFileName
#ファイルコピー
Copy-Item "D:\sampleFile.log" -Destination $testDummyFileFullPath
#更新日付を作成
$testDummyFileTime = $currentYear+"/"+$currentMonth+"/"+$currentDay+ " "+$currentHHMMSS
#指定した更新日付に変更
Set-ItemProperty $testDummyFileFullPath -name LastWriteTime -value $testDummyFileTime
}
}
}
}
echo "テストダミーファイル作成を完了しました。"