private/Convert-FrequencyString.ps1
Function Convert-FrequencyString { <# .SYNOPSIS Convert an interval string to into a repeat object for scan schedules .DESCRIPTION Convert an interval string to into a repeat object for scan schedules .PARAMETER Frequency Natural language text of the interval to test .EXAMPLE Convert-FrequencyString -Frequency 'Every first wednesay of the month' .EXAMPLE Convert-FrequencyString -Frequency 'Every 31st of the month repeated every 3 months' .EXAMPLE Convert-FrequencyString -Frequency 'Every 3rd of the month repeat every 2 months' .NOTES For additional information please see my GitHub wiki page .FUNCTIONALITY None .LINK https://github.com/My-Random-Thoughts/Rapid7Nexpose #> [CmdletBinding()] [OutputType([hashtable], $null)] Param ( [string]$Frequency ) $matchFrequency = (Test-FrequencyString -Frequency $Frequency -Verbose:$false) If ($matchFrequency.Success -eq $false) { Throw 'Invalid input entered, please see the examples for more information.' } If ($Frequency.ToLower().StartsWith('every') -eq $true) { [int] $interval = 0 [int] $weekOfMonth = 0 [string]$dayOfWeek = '' [string]$every = '' ForEach ($groupFrequency In ($matchFrequency.Groups | Where-Object { $_.Success -eq $true })) { Switch ($groupFrequency.Name) { '1' { # every (1) HOUR/DAY/WEEK $every = $groupFrequency.Value $interval = 1 } '2' {} # every X '3' { # HOURS/DAYS/WEEKS $every = ($groupFrequency.Value).TrimEnd('s') $interval = ($matchFrequency.Groups[2].Value) } '4' { # every MONDAY..SUNDAY $every = 'week' $interval = 1 $dayOfWeek = $groupFrequency.Value.ToLower() } '5' {} # every 1ST..5TH '6' { # MONDAY..SUNDAY of the month $every = 'day-of-month' $dayOfWeek = $groupFrequency.Value.ToLower() $weekOfMonth = ($matchFrequency.Groups[5].Value).Substring(0, 1) $interval = 1 } '7' { # 1st .. 31st [int]$matchDay = $groupFrequency.Value -replace ".{2}$" $every = 'date-of-month' $interval = 1 $dayOfWeek = $matchDay } '8' { # repeated every 2 .. 999 months $interval = $groupFrequency.Value } } } $apiQuery += @{ repeat = @{} } If ($dayOfWeek -ne '') { $apiQuery.repeat += @{ dayOfWeek = $dayOfWeek }} If ($every -ne '') { $apiQuery.repeat += @{ every = $every }} If ($interval -gt 0) { $apiQuery.repeat += @{ interval = $interval }} If ($weekOfMonth -gt 0) { $apiQuery.repeat += @{ weekOfMonth = $weekOfMonth }} Return $apiQuery } Else { Return $null } } |