function Set-PSIPAMAddress { [CmdletBinding()] param ( [parameter( Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, HelpMessage="Id of subnet address belongs to", Position=0)] [ValidateScript({ $_ -match "^\d+$" })] [ValidateNotNullOrEmpty()] [string] $Id, [parameter( Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, HelpMessage="Defines if address is presented as gateway", Position=1)] [bool] $Gateway, [parameter( Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, HelpMessage="Address description", Position=2)] [ValidateNotNullOrEmpty()] [string] $Description, [parameter( Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, HelpMessage="Address hostname", Position=3)] [ValidateNotNullOrEmpty()] [string] $Hostname, [parameter( Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, HelpMessage="Mac address", Position=4)] [ValidateScript({ $_.Replace(":","") -match "^$('([A-F0-9]{2})' * 6)$" })] [ValidateNotNullOrEmpty()] [string] $MAC, [parameter( Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, HelpMessage="Address owner", Position=5)] [ValidateNotNullOrEmpty()] [string] $Owner, [parameter( Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, HelpMessage="Id of subnet address belongs to", Position=6)] [ValidateScript({ $_ -match "^\d+$" })] [ValidateNotNullOrEmpty()] [string] $TagId, [parameter( Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, HelpMessage="Controls if PTR should not be created", Position=7)] [bool] $PTRIgnore, [parameter( Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, HelpMessage="Id of PowerDNS PTR record", Position=8)] [ValidateScript({ $_ -match "^\d+$" })] [ValidateNotNullOrEmpty()] [string] $PTRId, [parameter( Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, HelpMessage="Note", Position=9)] [ValidateNotNullOrEmpty()] [string] $Note, [parameter( Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, HelpMessage="Exclude this address from status update scans (ping)", Position=10)] [bool] $ExcludePing, [parameter( Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, HelpMessage="Id of device address belongs to", Position=11)] [ValidateScript({ $_ -match "^\d+$" })] [ValidateNotNullOrEmpty()] [string] $DeviceId, [parameter( Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, HelpMessage="Port", Position=12)] [ValidateNotNullOrEmpty()] [string] $Port, [parameter(Mandatory=$false,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)] [ValidateScript({ $_ -is [Hashtable] -or $_ -is [PSCustomObject] })] $CustomFields ) process { $_params = @{ Controller = "addresses" Method = "PATCH" } $_identifiers = @($Id) $_params.Add("Identifiers",$_identifiers) $_body = @{ } if ($Gateway) { $_body.Add("is_gateway", [int]$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", [int]$PTRIgnore) } if ($PTRId) { $_body.add("PTR", $PTRId)} if ($Note) { $_body.Add("note", $Note) } if ($ExcludePing) { $_body.Add("excludePing", [int]$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-PSIPAMRequest @_params } finally { Get-PSIPAMAddress -Id $Id } } } Export-ModuleMember -Function Set-PSIPAMAddress