일을 진행한다 보면 매월 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
실행해보니 다음과 같은 결과가 나오네요.
'programming language > powershell' 카테고리의 다른 글
Powershell 에서 문자에 대한 ascii 값 확인 A~Z 리스트 구하기 (0) | 2016.10.18 |
---|---|
Powershell 빈폴더 삭제 script (0) | 2016.10.17 |
Powershell 에서 Outlook 으로 메일 보내기 (0) | 2016.03.06 |
Powershell 를 활용한 Network Drive 찾기 (0) | 2016.02.16 |
Powershell 에서 exe 실행 시 끝날 때 까지 기다리게 하기 (0) | 2016.01.04 |
Powershell, Depth 에 따른 아이템 검색 (0) | 2015.08.05 |
Powershell 을 이용한 소스코드 라인 수 세기 (0) | 2015.05.19 |
Powershell 에서 7z명령어 사용하기 (0) | 2015.05.05 |
댓글