Files
ps.ipam/functions/public/Set-Address.ps1
2022-12-17 23:58:22 +03:00

193 lines
5.4 KiB
PowerShell

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