Powershell 매월 X 째 주 Y요일 찾기
일을 진행한다 보면 매월 X 째 주 Y요일에 어떤 일을 처리해야 하는 경우가 있습니다.
이런 스케줄을 처리 할 때 당연히 이에 대해 계산하는 함수 등이 필요 할 겁니다.
오늘은 Powershell 을 사용하여 위에 얘기한 매월 X 째 주 Y요일을 찾아볼까 합니다.
고맙게도 아래 주소에 Powershell을 사용하여 매월 X 째 주 Y요일을 찾는 Get-WeekDayInMonth 라는 함수가 작성되 있더군요.
http://blog.tyang.org/2012/09/03/powershell-function-get-weekdayinmonth/
Function Get-WeekDayInMonth ([int]$Month, [int]$year, [int]$WeekNumber, [int]$WeekDay)
{
$FirstDayOfMonth = Get-Date -Year $year -Month $Month -Day 1 -Hour 0 -Minute 0 -Second 0
#First week day of the month (i.e. first monday of the month)
[int]$FirstDayofMonthDay = $FirstDayOfMonth.DayOfWeek
$Difference = $WeekDay - $FirstDayofMonthDay
If ($Difference -lt 0)
{
$DaysToAdd = 7 - ($FirstDayofMonthDay - $WeekDay)
} elseif ($difference -eq 0 )
{
$DaysToAdd = 0
}else {
$DaysToAdd = $Difference
}
$FirstWeekDayofMonth = $FirstDayOfMonth.AddDays($DaysToAdd)
Remove-Variable DaysToAdd
#Add Weeks
$DaysToAdd = ($WeekNumber -1)*7
$TheDay = $FirstWeekDayofMonth.AddDays($DaysToAdd)
If (!($TheDay.Month -eq $Month -and $TheDay.Year -eq $Year))
{
$TheDay = $null
}
$TheDay.ToString("yyyy년 MM월 dd일")
}
위 주소의 원본 함수에서 년도 표기만 수정 했습니다.
위 함수의 입력 인자 중 WeekDay 는 X 째 주를 의미 합니다. WeekNumber 는 Y 요일을 의미 하며 일요일이 0 입니다.
따라서 월요일은 1, 화요일은 2 … 가 될 것입니다.
위에 소개한 Get-WeekDayInMonth 함수를 활용하여 2016 년 1월부터 12월 까지의 2째주 수요일을 찾아보겠습니다.
2째주 이므로 WeekDay 에 2 를 수요일이므로 WeekNumber 에 3을 입력 합니다.
다음과 같이 간단하게 코딩하면~ 결과를 얻을 수 있습니다.
$month = 1..12
$buffer =@()
foreach ($mon in $month)
{
$fist = Get-WeekDayInMonth $mon 2016 2 3
$buffer += $fist
}
$buffer
실행해보니 다음과 같은 결과가 나오네요.