У нас есть несколько сценариев, которые запускаются внутри запланированных задач, которые отправляют нам оповещения по электронной почте, чтобы напомнить нам о необходимости ежедневно выполнять действия в нашей среде.Я хотел бы добавить в скрипт (ы) логику, чтобы определить, отмечается ли сегодня компания в праздничный день, а не отправлять электронное письмо, если оно есть, потому что никто не хочет думать о работе в праздничный день!Вот что я придумала.
Я запускаю код, только если сегодня не выходной день.Я создаю массив со списком установленных выходных, которые не меняются.Затем я проверяю, является ли сегодня один из тех установленных праздников, и если это так, я возвращаю истину.Если это не установленный выходной, то я проверяю, различается ли это как день памяти, день труда и день благодарения.Наконец, я проверяю, является ли это пятницей или понедельником, и если это так - проверяет, выпадает ли установленный праздничный день на выходные и, следовательно, отмечается день раньше или позже.
<#
Company Holidays:
• New Year’s Day – 1st day of January
• Memorial Day – Last Monday in May
• Independence Day – 4th day of July
• Labor Day – 1st Monday in September
• Thanksgiving Day – 4th Thursday in November
• Christmas Day – 25th day of December
Day of Observance: A holiday will be observed on the holiday itself, except when the following conditions apply:
1. A holiday falling on a Saturday will be observed on the preceding Friday.
2. A holiday falling on Sunday will be observed on the following Monday.
#>
#We already know it's not a weekend because this code is only invoked if the day of the week does not start with S*.
function fn-get-variable-holiday ($Month, $DayofWeek, $DayofMonth, $IsHoliday)
{
if ($Month -eq 5)
{
if ($DayofWeek -eq 'Monday' -and $DayofMonth -ge 25)
{
#it's the first Monday of September, Labor Day
$IsHoliday = $true
Return $IsHoliday
Break
}
}
if ($Month -eq 9)
{
if ($DayofWeek -eq 'Monday' -and $DayofMonth -le 7)
{
#it's the first Monday of September, Labor Day
$IsHoliday = $true
Return $IsHoliday
Break
}
}
if ($Month -eq 11)
{
if ($DayofWeek -eq 'Thursday' -and ($DayofMonth -ge 22 -and ($DayofMonth -le 28)))
{
#it's the fourth Thursday of November, Thanksgiving Day
$IsHoliday = $true
Return $IsHoliday
}
}
}
Function fn-get-weekend-set-holiday ($DayofWeek, $DayofMonth, $IsHoliday) {
if ($DayofWeek -eq 'Monday') #Check to see if yesterday was a Holiday that we observe today
{
$IsHoliday = fn-get-set-holiday -Today $Today.AddDays(-1)
}
elseif ($DayofWeek -eq 'Friday') #Check to see if tomorrow is a Holiday that we observe today
{
$IsHoliday = fn-get-set-holiday -Today $Today.AddDays(1)
}
Return $IsHoliday
}
Function fn-get-set-holiday ($Today, $SetHolidays, $IsHoliday)
{
$SetHolidays = @("01/01","07/04","12/25")
foreach ($H in $SetHolidays)
{
if ($today -like "*$H*")
{
$IsHoliday = $true
Return $IsHoliday
Break
}
}
}
Function Main
{
#$Today = Get-Date
$Today = (Get-Date).AddDays(67)
$IsHoliday = $false
Write-Host "`nToday is $($Today.ToLongDateString())..."
if (fn-get-set-holiday -Today $Today -SetHolidays $SetHolidays -IsHoliday $IsHoliday)
{
Write-Host "It's a set holiday"
Return $true
}
elseif (fn-get-variable-holiday -Month $Today.Month -DayofWeek $today.DayOfWeek -DayofMonth $Today.Day -IsHoliday $IsHoliday)
{
Write-Host "It's a variable holiday"
Return $true
}
elseif (fn-get-weekend-holiday -DayofWeek $today.DayOfWeek -DayofMonth $Today.Day -IsHoliday $IsHoliday)
{
Write-Host "It's a weekend holiday"
Return $true
}
}
Main
Я ожидаю, что скрипт выдаст True, если сегодня - праздник, и ничего, если это не так.
Не стесняйтесь оставлять отзывы о том, как улучшить скрипт для синтаксиса или эффективности.