public/Get-NexposeAssetVulnerability.ps1

Function Get-NexposeAssetVulnerability {
<#
    .SYNOPSIS
        Returns the vulnerabilities for an asset
 
    .DESCRIPTION
        Returns the vulnerabilities for an asset
 
    .PARAMETER AssetId
        The identifier of the asset
 
    .PARAMETER VulnerabilityId
        The identifier of the vulnerability
 
    .EXAMPLE
        Get-NexposeAssetVulnerability -AssetId 3
 
    .EXAMPLE
        Get-NexposeAssetVulnerability -AssetId 3 -VulnerabilityId 'ssl-replace-self-signed-cert'
 
    .NOTES
        For additional information please see my GitHub wiki page
 
    .FUNCTIONALITY
        GET: assets/{id}/vulnerabilities
        GET: assets/{id}/vulnerabilities/{vulnerabilityId}
        GET: assets/{id}/vulnerabilities/{vulnerabilityId}/solution
        GET: assets/{id}/vulnerabilities/{vulnerabilityId}/validations
        GET: assets/{id}/vulnerabilities/{vulnerabilityId}/validations/{validationId}
 
    .LINK
        https://github.com/My-Random-Thoughts/Rapid7Nexpose
#>


    [CmdletBinding()]
    Param (
        [Parameter(Mandatory = $true)]
        [int]$AssetId,

        [string]$VulnerabilityId
    )

    If ([string]::IsNullOrEmpty($VulnerabilityId) -eq $true) {
        Write-Output @(Invoke-NexposeQuery -UrlFunction "assets/$AssetId/vulnerabilities" -RestMethod Get)
    }
    Else {
        [string]$uri = "assets/$AssetId/vulnerabilities/$VulnerabilityId"
        $vuln = (Invoke-NexposeQuery -UrlFunction $URI -RestMethod Get)

        # Include the additional properties...
        $vuln | Add-Member -Name 'solution'    -Value @(Invoke-NexposeQuery -UrlFunction "$uri/solution"    -RestMethod Get) -MemberType NoteProperty
        $vuln | Add-Member -Name 'validations' -Value @(Invoke-NexposeQuery -UrlFunction "$uri/validations" -RestMethod Get) -MemberType NoteProperty

        Write-Output $vuln
    }
}