psDateFunctions.psm1

#Region '.\Public\Get-FirstDayOfMonth.ps1' -1

function Get-FirstDayOfMonth {
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    if ($Month -lt 1 -or $month -gt 12) { throw 'Invalid Month'}
    return (Get-Date -Year $Year -Month $Month -Day 1).Date
}
#EndRegion '.\Public\Get-FirstDayOfMonth.ps1' 11
#Region '.\Public\Get-LastDayOfMonth.ps1' -1

function Get-LastDayOfMonth {
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    if ($Month -lt 1 -or $month -gt 12) { throw 'Invalid Month'}
    return (Get-Date -Year $Year -Month ($Month+1) -Day 1).Date.AddDays(-1)
}
#EndRegion '.\Public\Get-LastDayOfMonth.ps1' 11
#Region '.\Public\Get-NthLastWeekdayOfMonth.ps1' -1

function Get-NthLastWeekdayOfMonth {
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year,
        [Parameter(Mandatory)][int]$Nth,
        [Parameter(Mandatory)][System.DayOfWeek]$WeekDay
    )

    if ($Month -lt 1 -or $month -gt 12) { throw 'Invalid Month'}

    $lastDayOfMonth = Get-LastDayOfMonth -Year $Year -Month $Month

    $result =  $lastDayOfMonth.AddDays(
        (
            ([System.DayOfWeek]::$WeekDay - $lastDayOfMonth.DayOfWeek -7 ) % -7
        ) - 7 * ($Nth -1)
    )

    if ($result.Month -ne $Month) { throw 'That day does not exist'}

    return $result
}
#EndRegion '.\Public\Get-NthLastWeekdayOfMonth.ps1' 25
#Region '.\Public\Get-NthWeekdayOfMonth.ps1' -1

function Get-NthWeekdayOfMonth {
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year,
        [Parameter(Mandatory)][int]$Nth,
        [Parameter(Mandatory)][System.DayOfWeek]$WeekDay
    )

    if ($Month -lt 1 -or $month -gt 12) { throw 'Invalid Month'}

    $firstDayOfMonth = Get-FirstDayOfMonth -Year $Year -Month $Month

    $result =  $firstDayOfMonth.AddDays(
        (
            (7 + [System.DayOfWeek]::$WeekDay - $firstDayOfMonth.DayOfWeek) % 7
        ) + 7 * ($Nth -1)
    )

    if ($result.Month -ne $Month) { throw 'That day does not exist'}

    return $result
}
#EndRegion '.\Public\Get-NthWeekdayOfMonth.ps1' 25
#Region '.\Generated\Get-1stFridayOfMonth.ps1' -1

function Get-1stFridayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Friday -Nth 1
}
#EndRegion '.\Generated\Get-1stFridayOfMonth.ps1' 11
#Region '.\Generated\Get-1stMondayOfMonth.ps1' -1

function Get-1stMondayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Monday -Nth 1
}
#EndRegion '.\Generated\Get-1stMondayOfMonth.ps1' 11
#Region '.\Generated\Get-1stSaturdayOfMonth.ps1' -1

function Get-1stSaturdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Saturday -Nth 1
}
#EndRegion '.\Generated\Get-1stSaturdayOfMonth.ps1' 11
#Region '.\Generated\Get-1stSundayOfMonth.ps1' -1

function Get-1stSundayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Sunday -Nth 1
}
#EndRegion '.\Generated\Get-1stSundayOfMonth.ps1' 11
#Region '.\Generated\Get-1stThursdayOfMonth.ps1' -1

function Get-1stThursdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Thursday -Nth 1
}
#EndRegion '.\Generated\Get-1stThursdayOfMonth.ps1' 11
#Region '.\Generated\Get-1stTuesdayOfMonth.ps1' -1

function Get-1stTuesdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Tuesday -Nth 1
}
#EndRegion '.\Generated\Get-1stTuesdayOfMonth.ps1' 11
#Region '.\Generated\Get-1stWednesdayOfMonth.ps1' -1

function Get-1stWednesdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Wednesday -Nth 1
}
#EndRegion '.\Generated\Get-1stWednesdayOfMonth.ps1' 11
#Region '.\Generated\Get-2ndFridayOfMonth.ps1' -1

function Get-2ndFridayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Friday -Nth 2
}
#EndRegion '.\Generated\Get-2ndFridayOfMonth.ps1' 11
#Region '.\Generated\Get-2ndLastFridayOfMonth.ps1' -1

function Get-2ndLastFridayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Friday -Nth 2
}
#EndRegion '.\Generated\Get-2ndLastFridayOfMonth.ps1' 11
#Region '.\Generated\Get-2ndLastMondayOfMonth.ps1' -1

function Get-2ndLastMondayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Monday -Nth 2
}
#EndRegion '.\Generated\Get-2ndLastMondayOfMonth.ps1' 11
#Region '.\Generated\Get-2ndLastSaturdayOfMonth.ps1' -1

function Get-2ndLastSaturdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Saturday -Nth 2
}
#EndRegion '.\Generated\Get-2ndLastSaturdayOfMonth.ps1' 11
#Region '.\Generated\Get-2ndLastSundayOfMonth.ps1' -1

function Get-2ndLastSundayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Sunday -Nth 2
}
#EndRegion '.\Generated\Get-2ndLastSundayOfMonth.ps1' 11
#Region '.\Generated\Get-2ndLastThursdayOfMonth.ps1' -1

function Get-2ndLastThursdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Thursday -Nth 2
}
#EndRegion '.\Generated\Get-2ndLastThursdayOfMonth.ps1' 11
#Region '.\Generated\Get-2ndLastTuesdayOfMonth.ps1' -1

function Get-2ndLastTuesdayOfMonth {
    [Alias('Get-PatchTuesday')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Tuesday -Nth 2
}
#EndRegion '.\Generated\Get-2ndLastTuesdayOfMonth.ps1' 11
#Region '.\Generated\Get-2ndLastWednesdayOfMonth.ps1' -1

function Get-2ndLastWednesdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Wednesday -Nth 2
}
#EndRegion '.\Generated\Get-2ndLastWednesdayOfMonth.ps1' 11
#Region '.\Generated\Get-2ndMondayOfMonth.ps1' -1

function Get-2ndMondayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Monday -Nth 2
}
#EndRegion '.\Generated\Get-2ndMondayOfMonth.ps1' 11
#Region '.\Generated\Get-2ndSaturdayOfMonth.ps1' -1

function Get-2ndSaturdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Saturday -Nth 2
}
#EndRegion '.\Generated\Get-2ndSaturdayOfMonth.ps1' 11
#Region '.\Generated\Get-2ndSundayOfMonth.ps1' -1

function Get-2ndSundayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Sunday -Nth 2
}
#EndRegion '.\Generated\Get-2ndSundayOfMonth.ps1' 11
#Region '.\Generated\Get-2ndThursdayOfMonth.ps1' -1

function Get-2ndThursdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Thursday -Nth 2
}
#EndRegion '.\Generated\Get-2ndThursdayOfMonth.ps1' 11
#Region '.\Generated\Get-2ndTuesdayOfMonth.ps1' -1

function Get-2ndTuesdayOfMonth {
    [Alias('Get-PatchTuesday')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Tuesday -Nth 2
}
#EndRegion '.\Generated\Get-2ndTuesdayOfMonth.ps1' 11
#Region '.\Generated\Get-2ndWednesdayOfMonth.ps1' -1

function Get-2ndWednesdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Wednesday -Nth 2
}
#EndRegion '.\Generated\Get-2ndWednesdayOfMonth.ps1' 11
#Region '.\Generated\Get-3rdFridayOfMonth.ps1' -1

function Get-3rdFridayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Friday -Nth 3
}
#EndRegion '.\Generated\Get-3rdFridayOfMonth.ps1' 11
#Region '.\Generated\Get-3rdLastFridayOfMonth.ps1' -1

function Get-3rdLastFridayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Friday -Nth 3
}
#EndRegion '.\Generated\Get-3rdLastFridayOfMonth.ps1' 11
#Region '.\Generated\Get-3rdLastMondayOfMonth.ps1' -1

function Get-3rdLastMondayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Monday -Nth 3
}
#EndRegion '.\Generated\Get-3rdLastMondayOfMonth.ps1' 11
#Region '.\Generated\Get-3rdLastSaturdayOfMonth.ps1' -1

function Get-3rdLastSaturdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Saturday -Nth 3
}
#EndRegion '.\Generated\Get-3rdLastSaturdayOfMonth.ps1' 11
#Region '.\Generated\Get-3rdLastSundayOfMonth.ps1' -1

function Get-3rdLastSundayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Sunday -Nth 3
}
#EndRegion '.\Generated\Get-3rdLastSundayOfMonth.ps1' 11
#Region '.\Generated\Get-3rdLastThursdayOfMonth.ps1' -1

function Get-3rdLastThursdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Thursday -Nth 3
}
#EndRegion '.\Generated\Get-3rdLastThursdayOfMonth.ps1' 11
#Region '.\Generated\Get-3rdLastTuesdayOfMonth.ps1' -1

function Get-3rdLastTuesdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Tuesday -Nth 3
}
#EndRegion '.\Generated\Get-3rdLastTuesdayOfMonth.ps1' 11
#Region '.\Generated\Get-3rdLastWednesdayOfMonth.ps1' -1

function Get-3rdLastWednesdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Wednesday -Nth 3
}
#EndRegion '.\Generated\Get-3rdLastWednesdayOfMonth.ps1' 11
#Region '.\Generated\Get-3rdMondayOfMonth.ps1' -1

function Get-3rdMondayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Monday -Nth 3
}
#EndRegion '.\Generated\Get-3rdMondayOfMonth.ps1' 11
#Region '.\Generated\Get-3rdSaturdayOfMonth.ps1' -1

function Get-3rdSaturdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Saturday -Nth 3
}
#EndRegion '.\Generated\Get-3rdSaturdayOfMonth.ps1' 11
#Region '.\Generated\Get-3rdSundayOfMonth.ps1' -1

function Get-3rdSundayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Sunday -Nth 3
}
#EndRegion '.\Generated\Get-3rdSundayOfMonth.ps1' 11
#Region '.\Generated\Get-3rdThursdayOfMonth.ps1' -1

function Get-3rdThursdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Thursday -Nth 3
}
#EndRegion '.\Generated\Get-3rdThursdayOfMonth.ps1' 11
#Region '.\Generated\Get-3rdTuesdayOfMonth.ps1' -1

function Get-3rdTuesdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Tuesday -Nth 3
}
#EndRegion '.\Generated\Get-3rdTuesdayOfMonth.ps1' 11
#Region '.\Generated\Get-3rdWednesdayOfMonth.ps1' -1

function Get-3rdWednesdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Wednesday -Nth 3
}
#EndRegion '.\Generated\Get-3rdWednesdayOfMonth.ps1' 11
#Region '.\Generated\Get-4thFridayOfMonth.ps1' -1

function Get-4thFridayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Friday -Nth 4
}
#EndRegion '.\Generated\Get-4thFridayOfMonth.ps1' 11
#Region '.\Generated\Get-4thLastFridayOfMonth.ps1' -1

function Get-4thLastFridayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Friday -Nth 4
}
#EndRegion '.\Generated\Get-4thLastFridayOfMonth.ps1' 11
#Region '.\Generated\Get-4thLastMondayOfMonth.ps1' -1

function Get-4thLastMondayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Monday -Nth 4
}
#EndRegion '.\Generated\Get-4thLastMondayOfMonth.ps1' 11
#Region '.\Generated\Get-4thLastSaturdayOfMonth.ps1' -1

function Get-4thLastSaturdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Saturday -Nth 4
}
#EndRegion '.\Generated\Get-4thLastSaturdayOfMonth.ps1' 11
#Region '.\Generated\Get-4thLastSundayOfMonth.ps1' -1

function Get-4thLastSundayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Sunday -Nth 4
}
#EndRegion '.\Generated\Get-4thLastSundayOfMonth.ps1' 11
#Region '.\Generated\Get-4thLastThursdayOfMonth.ps1' -1

function Get-4thLastThursdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Thursday -Nth 4
}
#EndRegion '.\Generated\Get-4thLastThursdayOfMonth.ps1' 11
#Region '.\Generated\Get-4thLastTuesdayOfMonth.ps1' -1

function Get-4thLastTuesdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Tuesday -Nth 4
}
#EndRegion '.\Generated\Get-4thLastTuesdayOfMonth.ps1' 11
#Region '.\Generated\Get-4thLastWednesdayOfMonth.ps1' -1

function Get-4thLastWednesdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Wednesday -Nth 4
}
#EndRegion '.\Generated\Get-4thLastWednesdayOfMonth.ps1' 11
#Region '.\Generated\Get-4thMondayOfMonth.ps1' -1

function Get-4thMondayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Monday -Nth 4
}
#EndRegion '.\Generated\Get-4thMondayOfMonth.ps1' 11
#Region '.\Generated\Get-4thSaturdayOfMonth.ps1' -1

function Get-4thSaturdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Saturday -Nth 4
}
#EndRegion '.\Generated\Get-4thSaturdayOfMonth.ps1' 11
#Region '.\Generated\Get-4thSundayOfMonth.ps1' -1

function Get-4thSundayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Sunday -Nth 4
}
#EndRegion '.\Generated\Get-4thSundayOfMonth.ps1' 11
#Region '.\Generated\Get-4thThursdayOfMonth.ps1' -1

function Get-4thThursdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Thursday -Nth 4
}
#EndRegion '.\Generated\Get-4thThursdayOfMonth.ps1' 11
#Region '.\Generated\Get-4thTuesdayOfMonth.ps1' -1

function Get-4thTuesdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Tuesday -Nth 4
}
#EndRegion '.\Generated\Get-4thTuesdayOfMonth.ps1' 11
#Region '.\Generated\Get-4thWednesdayOfMonth.ps1' -1

function Get-4thWednesdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Wednesday -Nth 4
}
#EndRegion '.\Generated\Get-4thWednesdayOfMonth.ps1' 11
#Region '.\Generated\Get-5thFridayOfMonth.ps1' -1

function Get-5thFridayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Friday -Nth 5
}
#EndRegion '.\Generated\Get-5thFridayOfMonth.ps1' 11
#Region '.\Generated\Get-5thLastFridayOfMonth.ps1' -1

function Get-5thLastFridayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Friday -Nth 5
}
#EndRegion '.\Generated\Get-5thLastFridayOfMonth.ps1' 11
#Region '.\Generated\Get-5thLastMondayOfMonth.ps1' -1

function Get-5thLastMondayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Monday -Nth 5
}
#EndRegion '.\Generated\Get-5thLastMondayOfMonth.ps1' 11
#Region '.\Generated\Get-5thLastSaturdayOfMonth.ps1' -1

function Get-5thLastSaturdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Saturday -Nth 5
}
#EndRegion '.\Generated\Get-5thLastSaturdayOfMonth.ps1' 11
#Region '.\Generated\Get-5thLastSundayOfMonth.ps1' -1

function Get-5thLastSundayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Sunday -Nth 5
}
#EndRegion '.\Generated\Get-5thLastSundayOfMonth.ps1' 11
#Region '.\Generated\Get-5thLastThursdayOfMonth.ps1' -1

function Get-5thLastThursdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Thursday -Nth 5
}
#EndRegion '.\Generated\Get-5thLastThursdayOfMonth.ps1' 11
#Region '.\Generated\Get-5thLastTuesdayOfMonth.ps1' -1

function Get-5thLastTuesdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Tuesday -Nth 5
}
#EndRegion '.\Generated\Get-5thLastTuesdayOfMonth.ps1' 11
#Region '.\Generated\Get-5thLastWednesdayOfMonth.ps1' -1

function Get-5thLastWednesdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Wednesday -Nth 5
}
#EndRegion '.\Generated\Get-5thLastWednesdayOfMonth.ps1' 11
#Region '.\Generated\Get-5thMondayOfMonth.ps1' -1

function Get-5thMondayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Monday -Nth 5
}
#EndRegion '.\Generated\Get-5thMondayOfMonth.ps1' 11
#Region '.\Generated\Get-5thSaturdayOfMonth.ps1' -1

function Get-5thSaturdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Saturday -Nth 5
}
#EndRegion '.\Generated\Get-5thSaturdayOfMonth.ps1' 11
#Region '.\Generated\Get-5thSundayOfMonth.ps1' -1

function Get-5thSundayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Sunday -Nth 5
}
#EndRegion '.\Generated\Get-5thSundayOfMonth.ps1' 11
#Region '.\Generated\Get-5thThursdayOfMonth.ps1' -1

function Get-5thThursdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Thursday -Nth 5
}
#EndRegion '.\Generated\Get-5thThursdayOfMonth.ps1' 11
#Region '.\Generated\Get-5thTuesdayOfMonth.ps1' -1

function Get-5thTuesdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Tuesday -Nth 5
}
#EndRegion '.\Generated\Get-5thTuesdayOfMonth.ps1' 11
#Region '.\Generated\Get-5thWednesdayOfMonth.ps1' -1

function Get-5thWednesdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthWeekdayOfMonth -Year $Year -Month $Month -WeekDay Wednesday -Nth 5
}
#EndRegion '.\Generated\Get-5thWednesdayOfMonth.ps1' 11
#Region '.\Generated\Get-LastFridayOfMonth.ps1' -1

function Get-LastFridayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Friday -Nth 1
}
#EndRegion '.\Generated\Get-LastFridayOfMonth.ps1' 11
#Region '.\Generated\Get-LastMondayOfMonth.ps1' -1

function Get-LastMondayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Monday -Nth 1
}
#EndRegion '.\Generated\Get-LastMondayOfMonth.ps1' 11
#Region '.\Generated\Get-LastSaturdayOfMonth.ps1' -1

function Get-LastSaturdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Saturday -Nth 1
}
#EndRegion '.\Generated\Get-LastSaturdayOfMonth.ps1' 11
#Region '.\Generated\Get-LastSundayOfMonth.ps1' -1

function Get-LastSundayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Sunday -Nth 1
}
#EndRegion '.\Generated\Get-LastSundayOfMonth.ps1' 11
#Region '.\Generated\Get-LastThursdayOfMonth.ps1' -1

function Get-LastThursdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Thursday -Nth 1
}
#EndRegion '.\Generated\Get-LastThursdayOfMonth.ps1' 11
#Region '.\Generated\Get-LastTuesdayOfMonth.ps1' -1

function Get-LastTuesdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Tuesday -Nth 1
}
#EndRegion '.\Generated\Get-LastTuesdayOfMonth.ps1' 11
#Region '.\Generated\Get-LastWednesdayOfMonth.ps1' -1

function Get-LastWednesdayOfMonth {
    [Alias('')]
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    param (
        [Parameter(Mandatory)][int]$Month,
        [Parameter(Mandatory)][int]$Year
    )
    Get-NthLastWeekdayOfMonth -Year $Year -Month $Month -WeekDay Wednesday -Nth 1
}
#EndRegion '.\Generated\Get-LastWednesdayOfMonth.ps1' 11