function Set-Address { <# .SYNOPSIS Edit address object. .PARAMETER Id Id of subnet address belongs to. .PARAMETER AddressObject Address object to edit. .PARAMETER Gateway Defines if address is presented as gateway .PARAMETER Description Address description. #> [OutputType([PS.IPAM.address])] [CmdletBinding(DefaultParameterSetName="ById")] param ( [parameter( Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0, ParameterSetName="ById" )] [ValidateNotNullOrEmpty()] [int] $Id, [parameter( Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0, ParameterSetName="ByAddressObject" )] [ValidateNotNullOrEmpty()] [PS.IPAM.Address] $AddressObject, [parameter( Position=1 )] [parameter( ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, ParameterSetName="ById" )] [bool] $Gateway, [parameter( Position=2 )] [parameter( ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, ParameterSetName="ById" )] [ValidateNotNullOrEmpty()] [string] $Description, [parameter( Mandatory=$false, HelpMessage="Address hostname", Position=3 )] [ValidateNotNullOrEmpty()] [string] $Hostname, [parameter( Mandatory=$false, HelpMessage="Mac address", Position=4 )] [ValidateScript({ $_.Replace(":","") -match "^$('([A-F0-9]{2})' * 6)$" })] [ValidateNotNullOrEmpty()] [string] $MAC, [parameter( Mandatory=$false, HelpMessage="Address owner", Position=5 )] [ValidateNotNullOrEmpty()] [string] $Owner, [parameter( Mandatory=$false, HelpMessage="Id of subnet address belongs to", Position=6 )] [ValidateNotNullOrEmpty()] [int] $TagId, [parameter( Mandatory=$false, HelpMessage="Controls if PTR should not be created", Position=7 )] [bool] $PTRIgnore, [parameter( Mandatory=$false, HelpMessage="Id of PowerDNS PTR record", Position=8 )] [ValidateNotNullOrEmpty()] [int] $PTRId, [parameter( Mandatory=$false, HelpMessage="Note", Position=9 )] [ValidateNotNullOrEmpty()] [string] $Note, [parameter( Mandatory=$false, HelpMessage="Exclude this address from status update scans (ping)", Position=10 )] [bool] $ExcludePing, [parameter( Mandatory=$false, HelpMessage="Id of device address belongs to", Position=11 )] [ValidateNotNullOrEmpty()] [int] $DeviceId, [parameter( Mandatory=$false, HelpMessage="Port", Position=12 )] [ValidateNotNullOrEmpty()] [string] $Port, [parameter(Mandatory=$false)] [ValidateScript({ $_ -is [Hashtable] -or $_ -is [PSCustomObject] })] $CustomFields ) process { $_params = @{ Controller = [PS.IPAM.controllers]::addresses Method = "PATCH" } switch ($PSCmdlet.ParameterSetName) { "ByID" { $_id = $Id; break } "ByAddressObject" { $_id = $AddressObject.id; break } } $_identifiers = @($_id) $_params.Add("Identifiers",$_identifiers) $_body = @{ } if ($Gateway) { $_body.Add("is_gateway", $Gateway) } if ($Description) { $_body.Add("description", $Description) } if ($Hostname) { $_body.Add("hostname", $Hostname) } if ($MAC) { $_body.Add("mac", $MAC) } if ($Owner) { $_body.Add("owner", $Owner) } if ($TagId) { $_body.Add("tag", $TagId) } if ($PTRIgnore) { $_body.Add("PTRignore", $PTRIgnore) } if ($PTRId) { $_body.add("PTR", $PTRId)} if ($Note) { $_body.Add("note", $Note) } if ($ExcludePing) { $_body.Add("excludePing", $ExcludePing) } if ($DeviceId) { $_body.Add("deviceId", $DeviceId) } if ($Port) { $_body.Add("port", $Port) } if ($CustomFields) { if ($CustomFields -is [PSCustomObject]) { $_customFields = @{}; $CustomFields | Get-Member -MemberType *Property | Where-Object { $_customFields.($_.name) = $CustomFields.($_.name) } } else { $_customFields = $CustomFields } $_body = $_body + $_customFields } $_params.Add("Params",$_body) try { Invoke-Request @_params } finally { Get-Address -id $_id } } } Export-ModuleMember -Function Set-Address