Public/Get-NRApplication.ps1
function Get-NRApplication { <# .SYNOPSIS Builds up and submits a web request to the New Relic API. .DESCRIPTION Will build a properly structured web request to use for the New Relic API. This is mostly used by other cmdlets and is meant to be generic, thus it will not form the body or URI needed for most requests. .EXAMPLE Get-NRApplication -ApiKey '1234abc' # Returns all applications for the account .EXAMPLE Get-NRApplication -ApiKey '1234abc' -Id '111931' # Returns just the application object for the specified ID .EXAMPLE Get-NRApplication -ApiKey '1234abc' -Name 'MyWebApp' # Returns just the application object for the specified name .OUTPUTS System.Management.Automation.PSCustomObject The object returned is the application block (converted from json) from the web request response. #> [CmdletBinding(DefaultParameterSetName='NoFilter')] [Alias('gnra')] [OutputType([PSCustomObject])] Param ( # Api key for connecting to New Relic. Go to the link below for more details: # https://docs.newrelic.com/docs/apis/rest-api-v2/requirements/api-keys [Parameter(ParameterSetName='NoFilter', Mandatory=$true)] [Parameter(ParameterSetName='Name', Mandatory=$true)] [Parameter(ParameterSetName='ID', Mandatory=$true)] [ValidateNotNullOrEmpty()] [string] $ApiKey, # Name of the application, can accept wildcards '*' [Parameter(ParameterSetName='Name', ValueFromPipeline=$true)] [String] $Name, # ID of the application [Parameter(ParameterSetName='ID', ValueFromPipeline=$true)] [Int] $ID ) begin { Write-Verbose -Message 'Starting get request for applications' $BaseUri = 'https://api.newrelic.com/v2/applications{0}.json' } process { # build up the base invoke-nrrequest command $Splat = @{ ApiKey = $ApiKey Method = 'GET' } Write-Verbose -Message 'Building up NRRequest params' switch ($PSCmdlet.ParameterSetName) { 'Name' { Write-Debug -Message 'Using the Name parameter set' Write-Verbose -Message ('Working on: {0}' -f $Name) # set up the name we'll be adding to the body $BodyName = $Name -replace ' ', '+' Write-Debug -Message ('BodyName: {0}' -f $BodyName) # go with the base URI and add the body $Uri = $BaseUri -f '' $Body = @{ 'filter[name]' = $BodyName } Write-Debug -Message ('Body: {0}' -f ($Body | Out-String)) Write-Debug -Message ('Body Type: {0}' -f ($Body.GetType())) $Splat.Add('Body', $Body) } 'ID' { Write-Verbose -Message ('Working on: {0}' -f $ID) Write-Debug -Message 'Using the ID parameter set' # Add the app id to the base URI $Uri = $BaseUri -f ('/{0}' -f $ID) } 'NoFilter' { Write-Verbose -Message ('Getting all applications') Write-Debug -Message 'Using the NoFilter parameter set' $Uri = $BaseUri -f '' } Default {} } Write-Debug -Message ('Uri: {0}' -f $Uri) $Splat.Add('Uri', $Uri) Write-Debug -Message ('Splat: {0}' -f ($Splat | Out-String)) Write-Verbose -Message 'Invoking NR request' $Results = Invoke-NRRequest @Splat Write-Debug -Message ('Results: {0}' -f $Results) # Property name we're looking for will be 'Applications' if multiple are returned and 'Application' # if it's only one Write-Verbose 'Returning results' if ($Results.PSobject.Properties.name -contains 'Applications') { Write-Debug -Message 'Applications property, entering if block' Write-Debug -Message ('Applications: {0}' -f ($Results.Applications | Out-String)) $Results.Applications } else { Write-Debug -Message 'Application property, entering else block' Write-Debug -Message ('Application: {0}' -f ($Results.Application | Out-String)) $Results.Application } } end { Write-Verbose -Message 'Complete.' } } |