public/Get-NexposeAssetVulnerability.ps1

Function Get-NexposeAssetVulnerability {
<#
    .SYNOPSIS
        Returns the specified user
 
    .DESCRIPTION
        Returns the specified user by id, name, role or privilege
 
    .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
    }
}