function Set-Address { [CmdletBinding(DefaultParameterSetName="ById")] param ( [parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,HelpMessage="Id of subnet address belongs to",Position=0,ParameterSetName="ById")] [ValidateNotNullOrEmpty()] [int] $Id, [parameter(Mandatory=$false,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0,ParameterSetName="ByAddressObject")] [ValidateNotNullOrEmpty()] [PS.IPAM.Address] $AddressObject, [parameter(Mandatory=$false,HelpMessage="Defines if address is presented as gateway",Position=1)] [bool] $Gateway, [parameter(Mandatory=$false,HelpMessage="Address description",Position=2)] [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 = "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