PowerShellは、Windowsのシステム管理や日常的な業務を効率化するための強力なツールです。特に日付処理は多くのスクリプトで活用され、月末日を取得する処理もそのひとつです。月末日は、帳票作成や締め処理などでよく使われる要素ですが、PowerShellでは簡潔に求めることができます。この記事では、PowerShellを使って月末日を取得する方法を、初心者にもわかりやすく解説します。あわせて、実務で役立つ応用スクリプトも紹介します。
PowerShellで月末日を求めるには、少し工夫が必要です。以下の方法は、現在の年月を基準にした月末日を取得する例です。
$today = Get-Date
$firstDayNextMonth = Get-Date -Year $today.Year -Month ($today.Month % 12 + 1) -Day 1
$lastDayThisMonth = $firstDayNextMonth.AddDays(-1)
$lastDayThisMonth.ToString("yyyy-MM-dd")
このスクリプトは次のような流れです:
$today
で現在日付を取得。$firstDayNextMonth
にて、来月の1日を計算。.AddDays(-1)
で1日前、すなわち今月の最終日を求めます。この方法なら、31日、30日、28日、うるう年の29日も自動で対応できます。
任意の年月の月末日を知りたい場合も、同様の手順で取得可能です。以下は2025年6月の月末日を求めるスクリプトです。
$year = 2025
$month = 6
# 翌月の1日を求める(12月のときは翌年1月に対応)
if ($month -eq 12) {
$nextMonth = 1
$nextYear = $year + 1
} else {
$nextMonth = $month + 1
$nextYear = $year
}
$firstDayNextMonth = Get-Date -Year $nextYear -Month $nextMonth -Day 1
$lastDay = $firstDayNextMonth.AddDays(-1)
$lastDay.ToString("yyyy-MM-dd")
このスクリプトは、月末処理が必要な自動レポートやログ整理の自動化に活用できます。
業務でよくあるのが、「今日が月末かどうか判定する」処理です。以下のスクリプトで簡単に判定できます。
$today = Get-Date
$firstDayNextMonth = Get-Date -Year $today.Year -Month ($today.Month % 12 + 1) -Day 1
$lastDay = $firstDayNextMonth.AddDays(-1)
if ($today.Date -eq $lastDay.Date) {
Write-Output "今日は月末日です。"
} else {
Write-Output "今日は月末日ではありません。"
}
このようなスクリプトをタスクスケジューラで定期実行すれば、月末処理の自動化に組み込むこともできます。
月末日が土日祝日にあたるかどうかで、処理日を前倒しするような業務ルールもあるでしょう。PowerShellでは以下のように判定できます(祝日は別途カレンダーと照合が必要ですが、ここでは土日のみ判定)。
$lastDay = (Get-Date -Year 2025 -Month 6 -Day 1).AddMonths(1).AddDays(-1)
switch ($lastDay.DayOfWeek) {
'Saturday' { Write-Output "月末は土曜日です。前営業日に処理してください。" }
'Sunday' { Write-Output "月末は日曜日です。前営業日に処理してください。" }
default { Write-Output "月末は平日です。" }
}
このように、業務カレンダーに応じてフロー制御を組み込むことで、実用性がさらに高まります。
月末日をファイル名に含めたい場合、以下のような処理を使うことができます。
$lastDay = (Get-Date).AddMonths(1).AddDays(-((Get-Date).Day))
$filename = "Report_" + $lastDay.ToString("yyyyMMdd") + ".csv"
Write-Output "ファイル名は $filename です。"
出力結果例:
コピーする編集するファイル名は Report_20250630.csv です。
このようにすれば、ファイルの世代管理やバックアップにも便利です。
何度も同じロジックを使うなら関数化がおすすめです。
function Get-LastDayOfMonth {
param(
[int]$year = (Get-Date).Year,
[int]$month = (Get-Date).Month
)
if ($month -eq 12) {
$nextMonth = 1
$nextYear = $year + 1
} else {
$nextMonth = $month + 1
$nextYear = $year
}
$firstDayNextMonth = Get-Date -Year $nextYear -Month $nextMonth -Day 1
return $firstDayNextMonth.AddDays(-1)
}
# 使用例
$lastDay = Get-LastDayOfMonth -year 2025 -month 6
Write-Output "2025年6月の月末日は $($lastDay.ToString('yyyy-MM-dd')) です。"
このように関数化することで、スクリプト全体の可読性と再利用性が向上します。
PowerShellで月末日を取得する処理は、基本的な日付関数を活用することで柔軟に実現できます。システム運用やレポート作成、自動バックアップなど、あらゆる場面で役立つため、ぜひ自分の環境や業務にあった形で取り入れてみてください。
再利用性を意識して関数化しておくと、長期的な運用においても効率的です。PowerShellのスクリプトを活用して、日付処理をもっとスマートにしていきましょう。