function Get-Tag { [CmdletBinding(DefaultParameterSetName="NoParams")] [OutputType([PS.IPAM.Tag])] param ( [parameter(Mandatory=$false,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0,ParameterSetName="ByID")] [ValidateScript({ $_ -match "^\d+$" })] [ValidateNotNullOrEmpty()] [string] $Id, [parameter(Mandatory=$false,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0,ParameterSetName="ByAddressObject")] [ValidateNotNullOrEmpty()] [PS.IPAM.Address] $AddressObject, [parameter(Mandatory=$false,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0,ParameterSetName="BySubnetObject")] [ValidateNotNullOrEmpty()] [PS.IPAM.Subnetwork] $SubnetObject ) process { $_params = @{ Controller = [PS.IPAM.controllers]::addresses Method = [PS.IPAM.methods]::GET Type = [PS.IPAM.types]::tag } $_identifiers = @("tags") switch ($PSCmdlet.ParameterSetName) { "ByID" { $_identifiers += $Id; break } "ByAddressObject" { if ($AddressObject.TagId) { $_identifiers += $AddressObject.TagId } else { return $null } break } "BySubnetObject" { if ($SubnetObject.TagId) { $_identifiers += $SubnetObject.TagId } else { return $null } } } $_params.Add("Identifiers",$_identifiers) Invoke-Request @_params } } Export-ModuleMember -Function Get-Tag