Public/Find-DDEvents.ps1
function Find-DDEvents { <# .SYNOPSIS Query the event stream. .DESCRIPTION .PARAMETER StartDate Date object, not compatible with StartTimestamp .PARAMETER StartTimestamp Unix timestamp, not compatible with StartDate .PARAMETER EndDate Date object, defaults to current time, not compatible with EndTimestamp .PARAMETER EndTimestamp Unix timestamp, defaults to current time, not compatible with EndDate .PARAMETER Priority Search for 'low' or 'normal' priority events. Default is none. .PARAMETER Sources A string or array of strings indicating what source, if any, should be used to filter events. .PARAMETER Tags A string or array of strings indicating what tags, if any, should be used to filter events. #> [CmdletBinding(DefaultParameterSetName='Find-DDEvent:ByDate')] # All parameters belong to 2 sets: Find-DDEvent:ByDate and Find-DDEvent:ByTimestamp param ( [Parameter( Position=0, ValueFromPipeline=$False, ValueFromPipelineByPropertyName=$False, ValueFromRemainingArguments=$True, Mandatory=$True, HelpMessage="Start date", ParameterSetName="Find-DDEvent:ByDate" )] [ValidateNotNullOrEmpty()] [datetime]$StartDate, [Parameter( Position=1, ValueFromPipeline=$False, ValueFromPipelineByPropertyName=$False, ValueFromRemainingArguments=$True, Mandatory=$True, HelpMessage="End date", ParameterSetName="Find-DDEvent:ByDate" )] [ValidateNotNullOrEmpty()] [ValidateScript( {if ($_ -lt $StartDate) {throw [System.ArgumentException]::New('EndDate cannot be before StartDate') } else {return $True} } )] [datetime]$EndDate, [Parameter( Position=0, ValueFromPipeline=$False, ValueFromPipelineByPropertyName=$False, ValueFromRemainingArguments=$True, Mandatory=$True, HelpMessage="Start timestamp", ParameterSetName="Find-DDEvent:ByTimestamp" )] # [int]$null is 0, so we can't use [ValidateNullOrEmpty] [ValidateScript( {if ($_ -eq 0) {throw [System.ArgumentException]::New('Cannot bind argument to parameter <<StartTimestamp>> because it is null or 0.') } else {return $True} } )] [Double]$StartTimestamp, [Parameter( Position=1, ValueFromPipeline=$False, ValueFromPipelineByPropertyName=$False, ValueFromRemainingArguments=$True, Mandatory=$True, HelpMessage="End timestamp", ParameterSetName="Find-DDEvent:ByTimestamp" )] # [int]$null is 0, so we can't use [ValidateNullOrEmpty] [ValidateScript( {if ($_ -eq 0) {throw [System.ArgumentException]::New('Cannot bind argument to parameter <<EndTimestamp>> because it is null or 0.') } else {return $True} } )] [ValidateScript( {if ($_ -lt $StartTimestamp) {throw [System.ArgumentException]::New('EndTimestamp cannot be before StartTimestamp') } else {return $True} } )] [Double]$EndTimestamp, [Parameter( Position=2, ValueFromPipeline=$false, ValueFromPipelineByPropertyName=$false, ValueFromRemainingArguments=$True, Mandatory=$False, HelpMessage="Search for 'low' or 'normal' priority events. Default is none.", ParameterSetName="Find-DDEvent:ByDate" )] [Parameter( Position=2, ValueFromPipeline=$false, ValueFromPipelineByPropertyName=$false, ValueFromRemainingArguments=$True, Mandatory=$False, HelpMessage="Search for 'low' or 'normal' priority events. Default is none.", ParameterSetName="Find-DDEvent:ByTimestamp" )] [ValidateSet("low","normal")] [string[]]$Priority, [Parameter( Position=3, ValueFromPipeline=$false, ValueFromPipelineByPropertyName=$True, ValueFromRemainingArguments=$True, Mandatory=$False, HelpMessage="A string or array of strings indicating what source, if any, should be used to filter events.", ParameterSetName="Find-DDEvent:ByDate" )] [Parameter( Position=3, ValueFromPipeline=$false, ValueFromPipelineByPropertyName=$True, ValueFromRemainingArguments=$True, Mandatory=$False, HelpMessage="A string or array of strings indicating what source, if any, should be used to filter events.", ParameterSetName="Find-DDEvent:ByTimestamp" )] [string[]]$Sources, [Parameter( Position=4, ValueFromPipeline=$false, ValueFromPipelineByPropertyName=$True, ValueFromRemainingArguments=$True, Mandatory=$False, HelpMessage="A string or array of strings indicating what tags, if any, should be used to filter the list of monitors by scope", ParameterSetName="Find-DDEvent:ByDate" )] [Parameter( Position=4, ValueFromPipeline=$false, ValueFromPipelineByPropertyName=$True, ValueFromRemainingArguments=$True, Mandatory=$False, HelpMessage="A string or array of strings indicating what tags, if any, should be used to filter the list of monitors by scope", ParameterSetName="Find-DDEvent:ByTimestamp" )] [string[]]$Tags ) process { $Body = @{} if ($PSCmdlet.ParameterSetName -eq 'Find-DDEvent:ByDate') { $StartTimestamp = ConvertFrom-Date -Date $StartDate $EndTimestamp = ConvertFrom-Date -Date $EndDate } $Body.Add('start',$StartTimestamp) $Body.Add('end',$EndTimestamp) if ($Priority) { $Body.Add('priority',$Priority) } if ($Sources) { $Body.Add('sources',$Sources) } if ($Tags) { $Body.Add('tags',$Tags) } $result = New-DDQuery -EndPoint '/events' -Method 'Get' -Body $Body -RequiresApplicationKey -ErrorAction Stop $defaultDisplaySet = 'events' $defaultDisplayPropertySet = New-Object System.Management.Automation.PSPropertySet('DefaultDisplayPropertySet',[string[]]$defaultDisplaySet) $PSStandardMembers = [System.Management.Automation.PSMemberInfo[]]@($defaultDisplayPropertySet) $result | Add-Member MemberSet PSStandardMembers $PSStandardMembers return $result } } |