netbox-rest-module.psm1

#Region '.\Private\added-fields.ps1' -1

function createPostJson {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $True, Position = 0)][object]$Fields
    )
    $CurrentObject=New-Object -TypeName System.Object
    $Fields | ForEach-Object {
        $_.key | Out-Host
        $_.value | Out-Host
        $CurrentObject | Add-Member -MemberType NoteProperty -Name $_.key -Value $_.value
    }
    createJson($CurrentObject)
}
function createJson ($Object) { $Object | ConvertTo-Json -Depth 50 }
#EndRegion '.\Private\added-fields.ps1' 15
#Region '.\Private\api-items.ps1' -1

function Get-APIItemByQuery {
    [CmdletBinding()]
    Param(
        [parameter(Mandatory = $false)][object]$apiConnection = $Script:Connection,
        [parameter(Mandatory = $true)][string]$RelativePath,
        [parameter(Mandatory = $true)][string]$field,
        [parameter(Mandatory = $true)][string]$value
    )
    $QueryArguments= @{
        $field = $value
    }
    $ArgumentString= New-ArgumentString $QueryArguments
    $restParams = @{
        Method               = 'get'
        URI                  = "$($Connection.ApiBaseURL)/$RelativePath/?$ArgumentString"
        SkipCertificateCheck = $apiConnection.SkipCertificateCheck
    }
    Write-Verbose "[$($MyInvocation.MyCommand.Name)] Making API search call using '$field' looking for '$value'."
    Invoke-CustomRequest $restParams -Connection $Connection
}
function Find-ApiItemsContainingName {
    [CmdletBinding()]
    Param(
        [parameter(Mandatory = $false)][object]$apiConnection = $Script:Connection,
        [parameter(Mandatory = $true)][string]$RelativePath,
        [parameter(Mandatory = $true)][string]$Name
    )
    Write-Verbose "[$($MyInvocation.MyCommand.Name)] Attempting to find items containing '$Name'."
    Get-APIItemByQuery -apiConnection $apiConnection -field 'name__ic' -value $Name -RelativePath $RelativePath
}

function Get-APIItemByName {
    [CmdletBinding()]
    Param(
        [parameter(Mandatory = $false)][object]$apiConnection = $Script:Connection,
        [parameter(Mandatory = $true)][string]$RelativePath,
        [parameter(Mandatory = $true)][string]$value
    )
    Write-Verbose "[$($MyInvocation.MyCommand.Name)] Attempting to find item named '$Name'."
    (Get-APIItemByQuery -apiConnection $apiConnection -field 'name__ie' -value $value -RelativePath $RelativePath).results
}

function Get-ApiItemByID {
    [CmdletBinding()]
    Param(
        [parameter(Mandatory = $false)][object]$apiConnection = $Script:Connection,
        [parameter(Mandatory = $true)][string]$RelativePath,
        [parameter(Mandatory = $true)][string]$id
    )
    $restParams = @{
        Method               = 'get'
        URI                  = "$($Connection.ApiBaseURL)/$RelativePath/$id/"
        SkipCertificateCheck = $apiConnection.SkipCertificateCheck
    }
    Invoke-CustomRequest $restParams -Connection $Connection
}

function Get-ApiItemByPath {
    [CmdletBinding()]
    Param(
        [parameter(Mandatory = $false)][object]$apiConnection = $Script:Connection,
        [parameter(Mandatory = $true)][string]$Path
    )
    $restParams = @{
        Method               = 'get'
        URI                  = "$($Connection.ApiBaseURL)/$Path"
        SkipCertificateCheck = $apiConnection.SkipCertificateCheck
    }
    Invoke-CustomRequest $restParams -Connection $Connection
}


function Get-ApiItems {
    [CmdletBinding()]
    Param(
        [parameter(Mandatory = $false)][object]$apiConnection = $Script:Connection,
        [parameter(Mandatory = $true)][string]$RelativePath
    )
    $arguments = @{
        limit = 5000
    }
    $argumentString=[System.Web.HttpUtility]::ParseQueryString('')
    $arguments.GetEnumerator() | ForEach-Object {$argumentString.Add($_.Key, $_.Value)}
    $argumentString=$argumentString.ToString()
    $restParams = @{
        Method               = 'get'
        URI                  = "$($Connection.ApiBaseURL)/$RelativePath/?$argumentString"
        SkipCertificateCheck = $apiConnection.SkipCertificateCheck
    }
    # # (Invoke-CustomRequest -restParams $restParams -Connection $Connection).results
    (Invoke-CustomRequest $restParams -Connection $apiConnection).results
}
#EndRegion '.\Private\api-items.ps1' 93
#Region '.\Private\apiPaths.ps1' -1

$DeviceRolesAPIPath="dcim/device-roles"
$deviceTypesPath="dcim/device-types"
$DevicesAPIPath="dcim/devices"
$NBDeviceInterfaceAPIPath="dcim/interfaces"
$LocationsAPIPath="dcim/locations"
$ManufacturerAPIPath="dcim/manufacturers"
$DevicePlatformAPIPath="dcim/platforms"
$RacksAPIPath="dcim/racks"
$RackReservationsAPIPath="dcim/rack-reservations"
$RackRolesAPIPath="dcim/rack-roles"
$RacksAPIPath="dcim/racks"
$regionsAPIPath="dcim/regions"
$SiteGroupsAPIPath="dcim/site-groups"
$SitesAPIPath="dcim/sites"
$NBVirtualChassisAPIPath="dcim/virtual-chassis"
$NBAggregateAPIPath="ipam/aggregates"
$ASNsAPIPath="ipam/asns"
$IPAddressAPIPath="ipam/ip-addresses"
$IPRangesAPIPath="ipam/ip-ranges"
$PrefixesAPIPath="ipam/prefixes"
$RIRsAPIPath="ipam/rirs"
$IPAMRolesAPIPath="ipam/roles"
$NBServiceAPIPath="ipam/services"
$vlangroupsAPIPath="ipam/vlan-groups"
$VLANsAPIPath="ipam/vlans"
$VRFsApiPath="ipam/vrfs"
$StatusAPIPath="status"
$ContactGroupsAPIPath="tenancy/contact-groups"
$ContactRolesAPIPath="tenancy/contact-roles"
$ContactsAPIPath="tenancy/contacts"
$TenantGroupsAPIPath="tenancy/tenant-groups"
$TenantsAPIPath="tenancy/tenants"
$UsersAPIPath="users/users"
$VirtualizationClusterGroupsAPIPath="virtualization/cluster-groups"
$VirtualizationClusterTypesAPIPath="virtualization/cluster-types"
$VirtualizationClustersAPIPath="virtualization/clusters"
$VirtualizationInterfaceAPIPath="virtualization/interfaces"
$VirtualizationVMsAPIPath="virtualization/virtual-machines"
$NBWirelessLanGroupAPIPath="wireless/wireless-lan-groups"
$NBWirelessLanAPIPath="wireless/wireless-lans"
$NBWirelessLinkAPIPath="wireless/wireless-links"
# 0.0.5
$NBTagsAPIPath="extras/tags"
$NBObjectTypesAPIPath="extras/object-types"
$NBCircuitProvidersAPIPath="circuits/providers"
$NBCircuitProviderNetworksAPIPath="circuits/provider-networks"
$NBCircuitProviderAccountsAPIPath="circuits/provider-accounts"
$NBCircuitTypesAPIPath="circuits/circuit-types"
$NBCircuitsAPIPath="circuits/circuits"
$NBCircuitTerminationsAPIPath="circuits/circuit-terminations"
$NBServiceTemplatesAPIPath="ipam/service-templates"
$NBPowerPanelsAPIPath="dcim/power-panels"
$NBPowerFeedsAPIPath="dcim/power-feeds"

# 0.0.8

$NBCircuitGroupAssignmentsAPIPath="circuits/circuit-group-assignments"
$NBCircuitGroupsAPIPath="circuits/circuit-groups"
$NBCablesAPIPath="dcim/cables"
$NBCableTerminationsAPIPath="dcim/cable-terminations"
$NBPowerOutletsAPIPath='dcim/power-outlets'
$NBRackTypesAPIPath='dcim/rack-types'
$NBVirtualDisksAPIPath='virtualization/virtual-disks'
#EndRegion '.\Private\apiPaths.ps1' 64
#Region '.\Private\Invoke-CustomRequest.ps1' -1

function Invoke-CustomRequest {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $True, Position = 0)][System.Object]$restParams,
        [Parameter(Mandatory = $True, Position = 1)][System.Object]$Connection
    )
    $Headers = @{
        Authorization = "Token $($Connection.ApiKey)"
        "Content-Type"    = 'application/json'
    }
    $callstack=Get-PSCallStack
    Write-Debug ("[$($Callstack[1].command) ⇒ $($MyInvocation.MyCommand.Name)] REST params:`n" + ($restParams|Out-String))
    Write-Debug ("[$($Callstack[1].command) ⇒ $($MyInvocation.MyCommand.Name)] Headers:`n" + ($Headers|Out-String))
    Write-Verbose "[$($Callstack[1].command) ⇒ $($MyInvocation.MyCommand.Name)] Making API $($restParams.Method) call to $($restParams.Uri)"
    try {
        $result = Invoke-RestMethod @restParams -Headers $headers -SkipCertificateCheck:$Connection.SkipCertificateCheck  -ResponseHeadersVariable $ResponseHeaders -StatusCodeVariable $StatusCode
    }
    catch {
        Write-Error ("Response from API: $($_.ErrorDetails)")
        Write-Error ("[$($Callstack[1].command) ⇒ $($MyInvocation.MyCommand.Name)] Exception:`n" + ($_.Exception.Message|Out-String))
        #$Global:foo = $_
    }
    $result
    Write-Debug "[$($Callstack[1].command) ⇒ $($MyInvocation.MyCommand.Name)] Exiting function"
}
#EndRegion '.\Private\Invoke-CustomRequest.ps1' 26
#Region '.\Private\New-ArgumentString.ps1' -1

function New-ArgumentString {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $True, Position = 0)][hashtable]$QueryArguments
    )
    $OutputString = [System.Web.HttpUtility]::ParseQueryString('')
    $QueryArguments.GetEnumerator() | ForEach-Object { $OutputString.Add($_.Key, $_.Value) }
    $OutputString.ToString()
}
#EndRegion '.\Private\New-ArgumentString.ps1' 10
#Region '.\Private\processFieldUpdates.ps1' -1

function processFieldUpdates($key,$value) {
    switch($key){
        'slug' {$value=makeSlug -name $value}
        'tags' {[array]$value=$value.Split(',')}
        'asns' {[array]$value=$value.Split(',')}
        'install_date' {$value = $value|Get-Date -Format 'yyyy-MM-dd'}
        'termination_date' {$value = $value|Get-Date -Format 'yyyy-MM-dd'}
        'ipaddresses' {[array]$value=$value.Split(',')}
        default {}
    }
    $update=@{
        $key = $value
    }
    $update
}
#EndRegion '.\Private\processFieldUpdates.ps1' 16
#Region '.\Private\slug.ps1' -1

function makeSlug ([string]$name) {
    $name.ToLower() -Replace("[^\w ]+","") -replace " +","-" -replace "^-",'' -replace "-$",''
}
#EndRegion '.\Private\slug.ps1' 4
#Region '.\Public\endpoints\circuits\circuit-group-assignments\Get-NBCircuitGroupAssignmentByCircuitGroup.ps1' -1

function Get-NBCircuitGroupAssignmentByCircuitGroup {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    (Get-APIItemByQuery -apiConnection $Connection -RelativePath $NBCircuitGroupAssignmentsAPIPath -field 'group_id' -value $id).results
}
#EndRegion '.\Public\endpoints\circuits\circuit-group-assignments\Get-NBCircuitGroupAssignmentByCircuitGroup.ps1' 9
#Region '.\Public\endpoints\circuits\circuit-group-assignments\Get-NBCircuitGroupAssignmentByID.ps1' -1

function Get-NBCircuitGroupAssignmentByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBCircuitGroupAssignmentsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\circuits\circuit-group-assignments\Get-NBCircuitGroupAssignmentByID.ps1' 10
#Region '.\Public\endpoints\circuits\circuit-group-assignments\Get-NBCircuitGroupAssignments.ps1' -1

function Get-NBCircuitGroupAssignments {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBCircuitGroupAssignmentsAPIPath
}
#EndRegion '.\Public\endpoints\circuits\circuit-group-assignments\Get-NBCircuitGroupAssignments.ps1' 8
#Region '.\Public\endpoints\circuits\circuit-group-assignments\New-NBCircuitGroupAssignment.ps1' -1

function New-NBCircuitGroupAssignment {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][int]$group,
        [Parameter(Mandatory=$true,Position=1)][int]$circuit,
        [Parameter(Mandatory=$false)][string][ValidateSet('primary','secondary','tertiary','inactive')]$priority,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitGroupAssignmentsAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\circuits\circuit-group-assignments\New-NBCircuitGroupAssignment.ps1' 24
#Region '.\Public\endpoints\circuits\circuit-group-assignments\Remove-NBCircuitGroupAssignment.ps1' -1

function Remove-NBCircuitGroupAssignment {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitGroupAssignmentsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\circuits\circuit-group-assignments\Remove-NBCircuitGroupAssignment.ps1' 15
#Region '.\Public\endpoints\circuits\circuit-group-assignments\Set-NBCircuitGroupAssignment.ps1' -1

function Set-NBCircuitGroupAssignment {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        # ValidateSets updated as of Netbox v4.1.8
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('group','circuit','priority','tags')]
            $key,
        [Parameter(Mandatory=$true,Position=2,
            HelpMessage="A valid value for the attribute you want to change. If the expected value is an array, like for tags, pass it as '1,2' or whatever the ids of the tags you wish to set are."
        )][string]$value
    )
    $update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitGroupAssignmentsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\circuits\circuit-group-assignments\Set-NBCircuitGroupAssignment.ps1' 23
#Region '.\Public\endpoints\circuits\circuit-groups\Get-NBCircuitGroupByID.ps1' -1

function Get-NBCircuitGroupByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBCircuitGroupsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\circuits\circuit-groups\Get-NBCircuitGroupByID.ps1' 10
#Region '.\Public\endpoints\circuits\circuit-groups\Get-NBCircuitGroups.ps1' -1

function Get-NBCircuitGroups {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBCircuitGroupsAPIPath
}
#EndRegion '.\Public\endpoints\circuits\circuit-groups\Get-NBCircuitGroups.ps1' 8
#Region '.\Public\endpoints\circuits\circuit-groups\New-NBCircuitGroup.ps1' -1

function New-NBCircuitGroup {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][int]$tenant,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitGroupsAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\circuits\circuit-groups\New-NBCircuitGroup.ps1' 26
#Region '.\Public\endpoints\circuits\circuit-groups\Remove-NBCircuitGroup.ps1' -1

function Remove-NBCircuitGroup {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitGroupsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\circuits\circuit-groups\Remove-NBCircuitGroup.ps1' 15
#Region '.\Public\endpoints\circuits\circuit-groups\Set-NBCircuitGroup.ps1' -1

function Set-NBCircuitGroup {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        # ValidateSets updated as of Netbox v4.1.8
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','slug','description','tenant','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2,
            HelpMessage="A valid value for the attribute you want to change. If the expected value is an array, like for tags, pass it as '1,2' or whatever the ids of the tags you wish to set are."
        )][string]$value
    )
    $update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitGroupsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\circuits\circuit-groups\Set-NBCircuitGroup.ps1' 23
#Region '.\Public\endpoints\circuits\circuit-terminations\Get-NBCircuitTerminationByID.ps1' -1

function Get-NBCircuitTerminationByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBCircuitTerminationsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\circuits\circuit-terminations\Get-NBCircuitTerminationByID.ps1' 10
#Region '.\Public\endpoints\circuits\circuit-terminations\Get-NBCircuitTerminations.ps1' -1

function Get-NBCircuitTerminations {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBCircuitTerminationsAPIPath
}
#EndRegion '.\Public\endpoints\circuits\circuit-terminations\Get-NBCircuitTerminations.ps1' 8
#Region '.\Public\endpoints\circuits\circuit-terminations\New-NBCircuitTermination.ps1' -1

function New-NBCircuitTermination {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][int]$circuit,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('A','Z')]
            $term_side,        
        [Parameter(Mandatory=$false)][int]$site,
        [Parameter(Mandatory=$false)][int]$provider_network,
        [Parameter(Mandatory=$false)][int]$port_speed,
        [Parameter(Mandatory=$false)][int]$upstream_speed,
        [Parameter(Mandatory=$false)][string]$xconnect_id,
        [Parameter(Mandatory=$false)][string]$pp_info,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][bool]$mark_connected,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitTerminationsAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\circuits\circuit-terminations\New-NBCircuitTermination.ps1' 34
#Region '.\Public\endpoints\circuits\circuit-terminations\Remove-NBCircuitTermination.ps1' -1

function Remove-NBCircuitTermination {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitTerminationsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\circuits\circuit-terminations\Remove-NBCircuitTermination.ps1' 15
#Region '.\Public\endpoints\circuits\circuit-terminations\Set-NBCircuitTermination.ps1' -1

function Set-NBCircuitTermination {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('circuit','term_side','site','provider_network','port_speed','upstream_speed','xconnect_id','pp_info','description','mark_connected','custom_fields','tags')]
            $key,
        [Parameter(Mandatory=$true,Position=2,
            HelpMessage="A valid value for the attribute you want to change. If the expected value is an array, like for tags, pass it as '1,2' or whatever the ids of the tags you wish to set are."
        )][string]$value
    )
    $update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitTerminationsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\circuits\circuit-terminations\Set-NBCircuitTermination.ps1' 22
#Region '.\Public\endpoints\circuits\circuit-types\Get-NBCircuitTypeByID.ps1' -1

function Get-NBCircuitTypeByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBCircuitTypesAPIPath -id $id

}
#EndRegion '.\Public\endpoints\circuits\circuit-types\Get-NBCircuitTypeByID.ps1' 10
#Region '.\Public\endpoints\circuits\circuit-types\Get-NBCircuitTypeByName.ps1' -1

function Get-NBCircuitTypeByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $NBCircuitTypesAPIPath -value $name

}
#EndRegion '.\Public\endpoints\circuits\circuit-types\Get-NBCircuitTypeByName.ps1' 10
#Region '.\Public\endpoints\circuits\circuit-types\Get-NBCircuitTypes.ps1' -1

function Get-NBCircuitTypes {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBCircuitTypesAPIPath

}
#EndRegion '.\Public\endpoints\circuits\circuit-types\Get-NBCircuitTypes.ps1' 9
#Region '.\Public\endpoints\circuits\circuit-types\New-NBCircuitType.ps1' -1

function New-NBCircuitType {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][string]$color,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitTypesAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\circuits\circuit-types\New-NBCircuitType.ps1' 26
#Region '.\Public\endpoints\circuits\circuit-types\Remove-NBCircuitType.ps1' -1

function Remove-NBCircuitType {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitTypesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\circuits\circuit-types\Remove-NBCircuitType.ps1' 15
#Region '.\Public\endpoints\circuits\circuit-types\Set-NBCircuitType.ps1' -1

function Set-NBCircuitType {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','slug','color','description','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2,
            HelpMessage="A valid value for the attribute you want to change. If the expected value is an array, like for tags, pass it as '1,2' or whatever the ids of the tags you wish to set are."
        )][string]$value
    )
    $update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitTypesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    $result = (Invoke-CustomRequest -restParams $restParams -Connection $Connection)
    if ($result.message) { $result.message }
    else { $result }

}
#EndRegion '.\Public\endpoints\circuits\circuit-types\Set-NBCircuitType.ps1' 24
#Region '.\Public\endpoints\circuits\circuits\Get-NBCircuitByCID.ps1' -1

function Get-NBCircuitByCID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$cid
    )
    (Get-APIItemByQuery -apiConnection $Connection -RelativePath $NBCircuitsAPIPath -field cid -value $cid).results

}
#EndRegion '.\Public\endpoints\circuits\circuits\Get-NBCircuitByCID.ps1' 10
#Region '.\Public\endpoints\circuits\circuits\Get-NBCircuitByID.ps1' -1

function Get-NBCircuitByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBCircuitsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\circuits\circuits\Get-NBCircuitByID.ps1' 10
#Region '.\Public\endpoints\circuits\circuits\Get-NBCircuits.ps1' -1

function Get-NBCircuits {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBCircuitsAPIPath

}
#EndRegion '.\Public\endpoints\circuits\circuits\Get-NBCircuits.ps1' 9
#Region '.\Public\endpoints\circuits\circuits\New-NBCircuit.ps1' -1

function New-NBCircuit {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$cid,
        [Parameter(Mandatory=$true,Position=1)][int]$provider,
        [Parameter(Mandatory=$false)][int]$provider_account,
        [Parameter(Mandatory=$true,Position=2)][int]$type,
        [Parameter(Mandatory=$false)][string]
            [ValidateSet('planned','provisioning','active','offline','deprovisioning','decommissioned')]
            $status,
        [Parameter(Mandatory=$false)][int]$tenant,
        [Parameter(Mandatory=$false)][datetime]$install_date,
        [Parameter(Mandatory=$false)][datetime]$termination_date,
        [Parameter(Mandatory=$false)][int]$commit_rate,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        # Not adding assignment support here, that's what those cmdlets are for
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    if($PSBoundParameters['install_date']) {$PSBoundParameters['install_date']=$PSBoundParameters['install_date']|Get-Date -Format 'yyyy-MM-dd'}
    if($PSBoundParameters['termination_date']) {$PSBoundParameters['termination_date']=$PSBoundParameters['termination_date']|Get-Date -Format 'yyyy-MM-dd'}
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitsAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\circuits\circuits\New-NBCircuit.ps1' 39
#Region '.\Public\endpoints\circuits\circuits\Remove-NBCircuit.ps1' -1

function Remove-NBCircuit {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\circuits\circuits\Remove-NBCircuit.ps1' 15
#Region '.\Public\endpoints\circuits\circuits\Set-NBCircuit.ps1' -1

function Set-NBCircuit {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('cid','provider','provider_account','type','status','tenant','install_date','termination_date','commit_rate','description','comments','tags')]
            $key,
        [Parameter(Mandatory=$true,Position=2,
            HelpMessage="A valid value for the attribute you want to change. If the expected value is an array, like for tags, pass it as '1,2' or whatever the ids of the tags you wish to set are."
        )][string]$value
    )
    $update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    $result = (Invoke-CustomRequest -restParams $restParams -Connection $Connection)
    if ($result.message) { $result.message }
    else { $result }

}
#EndRegion '.\Public\endpoints\circuits\circuits\Set-NBCircuit.ps1' 24
#Region '.\Public\endpoints\circuits\provider-accounts\Get-NBCircuitProviderAccountByAccount.ps1' -1

function Get-NBCircuitProviderAccountByAccount {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$account
    )
    (Get-APIItemByQuery -apiConnection $Connection -RelativePath $NBCircuitProviderAccountsAPIPath -field account -value $account).results

}
#EndRegion '.\Public\endpoints\circuits\provider-accounts\Get-NBCircuitProviderAccountByAccount.ps1' 10
#Region '.\Public\endpoints\circuits\provider-accounts\Get-NBCircuitProviderAccountByID.ps1' -1

function Get-NBCircuitProviderAccountByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBCircuitProviderAccountsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\circuits\provider-accounts\Get-NBCircuitProviderAccountByID.ps1' 10
#Region '.\Public\endpoints\circuits\provider-accounts\Get-NBCircuitProviderAccounts.ps1' -1

function Get-NBCircuitProviderAccounts {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBCircuitProviderAccountsAPIPath

}
#EndRegion '.\Public\endpoints\circuits\provider-accounts\Get-NBCircuitProviderAccounts.ps1' 9
#Region '.\Public\endpoints\circuits\provider-accounts\New-NBCircuitProviderAccount.ps1' -1

function New-NBCircuitProviderAccount {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=1)][int]$provider,    
        [Parameter(Mandatory=$false)][string]$name,
        [Parameter(Mandatory=$true,Position=0)][string]$account,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitProviderAccountsAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\circuits\provider-accounts\New-NBCircuitProviderAccount.ps1' 27
#Region '.\Public\endpoints\circuits\provider-accounts\Remove-NBCircuitProviderAccount.ps1' -1

function Remove-NBCircuitProviderAccount {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitProviderAccountsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\circuits\provider-accounts\Remove-NBCircuitProviderAccount.ps1' 15
#Region '.\Public\endpoints\circuits\provider-accounts\Set-NBCircuitProviderAccount.ps1' -1

function Set-NBCircuitProviderAccount {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('provider','name','account','description','comments','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2,
            HelpMessage="A valid value for the attribute you want to change. If the expected value is an array, like for tags, pass it as '1,2' or whatever the ids of the tags you wish to set are."
        )][string]$value
    )
    $update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitProviderAccountsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\circuits\provider-accounts\Set-NBCircuitProviderAccount.ps1' 22
#Region '.\Public\endpoints\circuits\provider-networks\Get-NBCircuitProviderNetworkByID.ps1' -1

function Get-NBCircuitProviderNetworkByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBCircuitProviderNetworksAPIPath -id $id

}
#EndRegion '.\Public\endpoints\circuits\provider-networks\Get-NBCircuitProviderNetworkByID.ps1' 10
#Region '.\Public\endpoints\circuits\provider-networks\Get-NBCircuitProviderNetworkByName.ps1' -1

function Get-NBCircuitProviderNetworkByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $NBCircuitProviderNetworksAPIPath -value $name

}
#EndRegion '.\Public\endpoints\circuits\provider-networks\Get-NBCircuitProviderNetworkByName.ps1' 10
#Region '.\Public\endpoints\circuits\provider-networks\Get-NBCircuitProviderNetworks.ps1' -1

function Get-NBCircuitProviderNetworks {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBCircuitProviderNetworksAPIPath

}
#EndRegion '.\Public\endpoints\circuits\provider-networks\Get-NBCircuitProviderNetworks.ps1' 9
#Region '.\Public\endpoints\circuits\provider-networks\New-NBCircuitProviderNetwork.ps1' -1

function New-NBCircuitProviderNetwork {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=1)][int]$provider,
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][string]$service_id,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitProviderNetworksAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\circuits\provider-networks\New-NBCircuitProviderNetwork.ps1' 27
#Region '.\Public\endpoints\circuits\provider-networks\Remove-NBCircuitProviderNetwork.ps1' -1

function Remove-NBCircuitProviderNetwork {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitProviderNetworksAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\circuits\provider-networks\Remove-NBCircuitProviderNetwork.ps1' 15
#Region '.\Public\endpoints\circuits\provider-networks\Set-NBCircuitProviderNetwork.ps1' -1

function Set-NBCircuitProviderNetwork {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('provider','name','service_id','description','comments','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2,
            HelpMessage="A valid value for the attribute you want to change. If the expected value is an array, like for tags, pass it as '1,2' or whatever the ids of the tags you wish to set are."
        )][string]$value
    )
    $update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitProviderNetworksAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\circuits\provider-networks\Set-NBCircuitProviderNetwork.ps1' 22
#Region '.\Public\endpoints\circuits\providers\Get-NBCircuitProviderByID.ps1' -1

function Get-NBCircuitProviderByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBCircuitProvidersAPIPath -id $id

}
#EndRegion '.\Public\endpoints\circuits\providers\Get-NBCircuitProviderByID.ps1' 10
#Region '.\Public\endpoints\circuits\providers\Get-NBCircuitProviderByName.ps1' -1

function Get-NBCircuitProviderByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $NBCircuitProvidersAPIPath -value $name

}
#EndRegion '.\Public\endpoints\circuits\providers\Get-NBCircuitProviderByName.ps1' 10
#Region '.\Public\endpoints\circuits\providers\Get-NBCircuitProviders.ps1' -1

function Get-NBCircuitProviders {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBCircuitProvidersAPIPath

}
#EndRegion '.\Public\endpoints\circuits\providers\Get-NBCircuitProviders.ps1' 9
#Region '.\Public\endpoints\circuits\providers\New-NBCircuitProvider.ps1' -1

function New-NBCircuitProvider {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        # Not adding support for accounts here, you can set those on the account
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$asns,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitProvidersAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\circuits\providers\New-NBCircuitProvider.ps1' 28
#Region '.\Public\endpoints\circuits\providers\Remove-NBCircuitProvider.ps1' -1

function Remove-NBCircuitProvider {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitProvidersAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\circuits\providers\Remove-NBCircuitProvider.ps1' 15
#Region '.\Public\endpoints\circuits\providers\Set-NBCircuitProvider.ps1' -1

function Set-NBCircuitProvider {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','slug','description','comments','asns','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2,
            HelpMessage="A valid value for the attribute you want to change. If the expected value is an array, like for tags, pass it as '1,2' or whatever the ids of the tags you wish to set are."
        )][string]$value
    )
    $update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBCircuitProvidersAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\circuits\providers\Set-NBCircuitProvider.ps1' 22
#Region '.\Public\endpoints\dcim\cable-terminations\Get-NBCableTerminationByID.ps1' -1

function Get-NBCableTerminationByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBCableTerminationsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\dcim\cable-terminations\Get-NBCableTerminationByID.ps1' 10
#Region '.\Public\endpoints\dcim\cable-terminations\Get-NBCableTerminations.ps1' -1

function Get-NBCableTerminations {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBCableTerminationsAPIPath
}
#EndRegion '.\Public\endpoints\dcim\cable-terminations\Get-NBCableTerminations.ps1' 8
#Region '.\Public\endpoints\dcim\cable-terminations\New-NBCableTermination.ps1' -1

function New-NBCableTermination {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][int]$cable,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('A','B')]
            $cable_end,        
        [Parameter(Mandatory=$false)][string]$termination_type,
        [Parameter(Mandatory=$false)][int]$termination_id,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBCableTerminationsAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\dcim\cable-terminations\New-NBCableTermination.ps1' 26
#Region '.\Public\endpoints\dcim\cable-terminations\Remove-NBCableTermination.ps1' -1

function Remove-NBCableTermination {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBCableTerminationsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\cable-terminations\Remove-NBCableTermination.ps1' 15
#Region '.\Public\endpoints\dcim\cable-terminations\Set-NBCableTermination.ps1' -1

# There is almost certainly no point to this cmdlet since if you go from one termination type to another, you have to set both at the same time.
# On the off chance it's useful I'll leave it in but if you have to switch types on one end of a termination, you're likely better off making a whole new termination.
function Set-NBCableTermination {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('cable','cable_end','termination_type','termination_id')]
            $key,
        [Parameter(Mandatory=$true,Position=2,
            HelpMessage="A valid value for the attribute you want to change. If the expected value is an array, like for tags, pass it as '1,2' or whatever the ids of the tags you wish to set are."
        )][string]$value
    )
    $update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBCableTerminationsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\cable-terminations\Set-NBCableTermination.ps1' 24
#Region '.\Public\endpoints\dcim\cables\Get-NBCableByID.ps1' -1

function Get-NBCableByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBCablesAPIPath -id $id

}
#EndRegion '.\Public\endpoints\dcim\cables\Get-NBCableByID.ps1' 10
#Region '.\Public\endpoints\dcim\cables\Get-NBCables.ps1' -1

function Get-NBCables {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBCablesAPIPath
}
#EndRegion '.\Public\endpoints\dcim\cables\Get-NBCables.ps1' 8
#Region '.\Public\endpoints\dcim\cables\New-NBCable.ps1' -1

function New-NBCable {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)]
            [ValidateSet(
                'cat3','cat5','cat5e','cat6','cat6a','cat7','cat7a','cat8','dac-active','dac-passive','mrj21-trunk','coaxial','mmf',
                'mmf-om1','mmf-om2','mmf-om3','mmf-om4','mmf-om5','smf','smf-os1','smf-os2','aoc','usb','power'
            )]
            [string]$type,
        [Parameter(Mandatory=$true,Position=0)][hashtable[]]$a_terminations,
        [Parameter(Mandatory=$true,Position=1)][hashtable[]]$b_terminations,
        [Parameter(Mandatory=$false)]
            [ValidateSet('connected','planned','decommissioning')]
            [string]$status,
        [Parameter(Mandatory=$false)][int]$tenant,
        [Parameter(Mandatory=$false)][string]$label,
        [Parameter(Mandatory=$false)][string]$color,
        [Parameter(Mandatory=$false)][int]$length,
        [Parameter(Mandatory=$false)]
            [ValidateSet('km','m','cm','mi','ft','in')]
            [string]$length_unit,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBCablesAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\dcim\cables\New-NBCable.ps1' 42
#Region '.\Public\endpoints\dcim\cables\Remove-NBCable.ps1' -1

function Remove-NBCable {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBCablesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\cables\Remove-NBCable.ps1' 15
#Region '.\Public\endpoints\dcim\cables\Set-NBCable.ps1' -1

function Set-NBCable {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('type','a_terminations','b_terminations','status','tenant','label','color','length','length_unit','description','comments','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2,
            HelpMessage="A valid value for the attribute you want to change. If the expected value is an array, like for tags, pass it as '1,2' or whatever the ids of the tags you wish to set are."
        )][string]$value
    )
    $update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBCablesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\cables\Set-NBCable.ps1' 22
#Region '.\Public\endpoints\dcim\device-roles\Get-NBDeviceRoleByID.ps1' -1

function Get-NBDeviceRoleByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $DeviceRolesAPIPath -id $id

}
#EndRegion '.\Public\endpoints\dcim\device-roles\Get-NBDeviceRoleByID.ps1' 10
#Region '.\Public\endpoints\dcim\device-roles\Get-NBDeviceRoleByName.ps1' -1

function Get-NBDeviceRoleByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $DeviceRolesAPIPath -value $name

}
#EndRegion '.\Public\endpoints\dcim\device-roles\Get-NBDeviceRoleByName.ps1' 10
#Region '.\Public\endpoints\dcim\device-roles\Get-NBDeviceRoles.ps1' -1

function Get-NBDeviceRoles {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $DeviceRolesAPIPath

}
#EndRegion '.\Public\endpoints\dcim\device-roles\Get-NBDeviceRoles.ps1' 9
#Region '.\Public\endpoints\dcim\device-roles\New-NBDeviceRole.ps1' -1

function New-NBDeviceRole {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$true,Position=1)][string]$color,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$DeviceRolesAPIPath/"
        body = $PostJson
    }
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\dcim\device-roles\New-NBDeviceRole.ps1' 23
#Region '.\Public\endpoints\dcim\device-roles\Remove-NBDeviceRole.ps1' -1

function Remove-NBDeviceRole {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$DeviceRolesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\device-roles\Remove-NBDeviceRole.ps1' 15
#Region '.\Public\endpoints\dcim\device-roles\Set-NBDeviceRole.ps1' -1

function Set-NBDeviceRole {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','slug','color','vm_role','description','tags')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
    $update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$DeviceRolesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\device-roles\Set-NBDeviceRole.ps1' 20
#Region '.\Public\endpoints\dcim\device-types\Find-NBDeviceTypesContainingModel.ps1' -1

function Find-NBDeviceTypesContainingModel {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$model
    )
    Get-ApiItemByQuery -apiConnection $Connection -RelativePath $deviceTypesPath -field 'model__ic' -value $model

}
#EndRegion '.\Public\endpoints\dcim\device-types\Find-NBDeviceTypesContainingModel.ps1' 10
#Region '.\Public\endpoints\dcim\device-types\Get-NBDeviceTypeByID.ps1' -1

function Get-NBDeviceTypeByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $deviceTypesPath -id $id

}
#EndRegion '.\Public\endpoints\dcim\device-types\Get-NBDeviceTypeByID.ps1' 10
#Region '.\Public\endpoints\dcim\device-types\Get-NBDeviceTypeByModel.ps1' -1

function Get-NBDeviceTypeByModel {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$model
    )
    (Get-ApiItemByQuery -apiConnection $Connection -RelativePath $deviceTypesPath -field 'model__ie' -value $model).results

}
#EndRegion '.\Public\endpoints\dcim\device-types\Get-NBDeviceTypeByModel.ps1' 10
#Region '.\Public\endpoints\dcim\device-types\Get-NBDeviceTypes.ps1' -1

function Get-NBDeviceTypes {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $deviceTypesPath

}
#EndRegion '.\Public\endpoints\dcim\device-types\Get-NBDeviceTypes.ps1' 9
#Region '.\Public\endpoints\dcim\device-types\New-NBDeviceType.ps1' -1

function New-NBDeviceType {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][int]$manufacturer,
        [Parameter(Mandatory=$false)][int]$default_platform,
        [Parameter(Mandatory=$true,Position=1)][string]$model,
        [Parameter(Mandatory=$false)][string]$part_number,
        [Parameter(Mandatory=$false)][int]$u_height,
        [Parameter(Mandatory=$false)][bool]$is_full_depth,
        [Parameter(Mandatory=$false)][string]$subdevice_role,
        [Parameter(Mandatory=$false)]
            [ValidateSet('front-to-rear','rear-to-front','left-to-right','right-to-left','side-to-rear','passive','mixed')]
            [string]$airflow,
        [Parameter(Mandatory=$false)][int]$weight,
        [Parameter(Mandatory=$false)]
            [ValidateSet('kg','g','lb','oz')]
            [string]$weight_unit,
        [Parameter(Mandatory=$false)][string]$front_image,
        [Parameter(Mandatory=$false)][string]$rear_image,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $model
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    Write-Verbose "[$($MyInvocation.MyCommand.Name)] Running"
    Write-Verbose $PostJson
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$deviceTypesPath/"
        body = $PostJson
    }
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\dcim\device-types\New-NBDeviceType.ps1' 41
#Region '.\Public\endpoints\dcim\device-types\Remove-NBDeviceType.ps1' -1

function Remove-NBDeviceType {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$deviceTypesPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\device-types\Remove-NBDeviceType.ps1' 15
#Region '.\Public\endpoints\dcim\device-types\Set-NBDeviceType.ps1' -1

function Set-NBDeviceType {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('manufacturer','model','slug','part_number','u_height','is_full_depth','subdevice_role','airflow',
            'comments','tags')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
    $update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$deviceTypesPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\device-types\Set-NBDeviceType.ps1' 21
#Region '.\Public\endpoints\dcim\devices\Find-NBDevicesContainingName.ps1' -1

function Find-NBDevicesContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $DevicesAPIPath -name $name

}
#EndRegion '.\Public\endpoints\dcim\devices\Find-NBDevicesContainingName.ps1' 10
#Region '.\Public\endpoints\dcim\devices\Get-NBDeviceByID.ps1' -1

function Get-NBDeviceByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $DevicesAPIPath -id $id

}
#EndRegion '.\Public\endpoints\dcim\devices\Get-NBDeviceByID.ps1' 10
#Region '.\Public\endpoints\dcim\devices\Get-NBDeviceByName.ps1' -1

function Get-NBDeviceByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $DevicesAPIPath -value $name

}
#EndRegion '.\Public\endpoints\dcim\devices\Get-NBDeviceByName.ps1' 10
#Region '.\Public\endpoints\dcim\devices\Get-NBDevices.ps1' -1

function Get-NBDevices {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $DevicesAPIPath

}
#EndRegion '.\Public\endpoints\dcim\devices\Get-NBDevices.ps1' 9
#Region '.\Public\endpoints\dcim\devices\New-NBDevice.ps1' -1

function New-NBDevice {
    <#
    .SYNOPSIS
    Adds a new device object to Netbox
    #>

    [CmdletBinding()]
    # ValidateSets updated as of Netbox v4.1.8
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$true,Position=1)][int]$device_type,
        [Parameter(Mandatory=$true,Position=2)][int]$role,
        [Parameter(Mandatory=$false,Position=3)][int]$tenant,
        [Parameter(Mandatory=$false)][int]$platform,
        [Parameter(Mandatory=$false)][string]$serial,
        [Parameter(Mandatory=$false)][string]$asset_tag,
        [Parameter(Mandatory=$false)][int]$site,
        [Parameter(Mandatory=$false)][int]$location,
        [Parameter(Mandatory=$false)][int]$rack,
        [Parameter(Mandatory=$false)][int]$position,
        [Parameter(Mandatory=$false)]
            [ValidateSet('front','rear')]
            [string]$face,
        [Parameter(Mandatory=$false)][double]$latitude,
        [Parameter(Mandatory=$false)][double]$longitude,
        [Parameter(Mandatory=$false)]
            [ValidateSet('offline','active','planned','staged','failed','inventory','decommissioning')]
            [string]$status,
        [Parameter(Mandatory=$false)]
            [ValidateSet('front-to-rear','rear-to-front','left-to-right','right-to-left','side-to-rear','rear-to-side','bottom-to-top','top-to-bottom','passive','mixed')]
            [string]$airflow,
        [Parameter(Mandatory=$false)][int]$primary_ip4,
        [Parameter(Mandatory=$false)][int]$primary_ip6,
        [Parameter(Mandatory=$false)][int]$oob_ip,
        [Parameter(Mandatory=$false)][int]$cluster,
        [Parameter(Mandatory=$false)][int]$virtual_chassis,
        [Parameter(Mandatory=$false)][int]$vc_position,
        [Parameter(Mandatory=$false)][int]$vc_priority,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$DevicesAPIPath/"
        body = $PostJson
    }
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\dcim\devices\New-NBDevice.ps1' 57
#Region '.\Public\endpoints\dcim\devices\Remove-NBDevice.ps1' -1

function Remove-NBDevice {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$DevicesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\devices\Remove-NBDevice.ps1' 15
#Region '.\Public\endpoints\dcim\devices\Set-NBDevice.ps1' -1

function Set-NBDevice {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        # ValidateSets updated as of Netbox v4.1.8
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','device_type','role','tenant','platform','serial','asset_tag','site',
                'location','rack','position','face','latitude','longitude','status','airflow','primary_ip4',
                'primary_ip6','oob_ip','cluster','virtual_chassis','vc_position','vc_priority','description',
                'comments','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
    $update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$DevicesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    Write-Debug $restParams.body|Out-String
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\devices\Set-NBDevice.ps1' 25
#Region '.\Public\endpoints\dcim\interfaces\Find-NBDeviceInterfacesContainingName.ps1' -1

function Find-NBDeviceInterfacesContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    (Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $NBDeviceInterfaceAPIPath -name $name).results

}
#EndRegion '.\Public\endpoints\dcim\interfaces\Find-NBDeviceInterfacesContainingName.ps1' 10
#Region '.\Public\endpoints\dcim\interfaces\Get-NBDeviceInterfaceByID.ps1' -1

function Get-NBDeviceInterfaceByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBDeviceInterfaceAPIPath -id $id

}
#EndRegion '.\Public\endpoints\dcim\interfaces\Get-NBDeviceInterfaceByID.ps1' 10
#Region '.\Public\endpoints\dcim\interfaces\Get-NBDeviceInterfaceByName.ps1' -1

function Get-NBDeviceInterfaceByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $NBDeviceInterfaceAPIPath -value $name

}
#EndRegion '.\Public\endpoints\dcim\interfaces\Get-NBDeviceInterfaceByName.ps1' 10
#Region '.\Public\endpoints\dcim\interfaces\Get-NBDeviceInterfaceForDevice.ps1' -1

function Get-NBDeviceInterfaceForDevice {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    (Get-APIItemByQuery -apiConnection $Connection -RelativePath $NBDeviceInterfaceAPIPath -field 'device_id' $id).results

}
#EndRegion '.\Public\endpoints\dcim\interfaces\Get-NBDeviceInterfaceForDevice.ps1' 10
#Region '.\Public\endpoints\dcim\interfaces\Get-NBDeviceInterfaces.ps1' -1

function Get-NBDeviceInterfaces {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBDeviceInterfaceAPIPath

}
#EndRegion '.\Public\endpoints\dcim\interfaces\Get-NBDeviceInterfaces.ps1' 9
#Region '.\Public\endpoints\dcim\interfaces\New-NBDeviceInterface.ps1' -1

function New-NBDeviceInterface {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=2)][int]$device,    
        [Parameter(Mandatory=$false)][int]$module,    
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][string]$label,
        [Parameter(Mandatory=$true,Position=1)]
            [ValidateSet("virtual","bridge","lag","100base-fx","100base-lfx","100base-tx","100base-t1","1000base-t",
                "1000base-lx","1000base-tx","2.5gbase-t","5gbase-t","10gbase-t","10gbase-cx4","100base-x-sfp",
                "1000base-x-gbic","1000base-x-sfp","10gbase-x-sfpp","10gbase-x-xfp","10gbase-x-xenpak","10gbase-x-x2",
                "25gbase-x-sfp28","50gbase-x-sfp56","40gbase-x-qsfpp","50gbase-x-sfp28","100gbase-x-cfp",
                "100gbase-x-cfp2","200gbase-x-cfp2","400gbase-x-cfp2","100gbase-x-cfp4","100gbase-x-cxp",
                "100gbase-x-cpak","100gbase-x-dsfp","100gbase-x-sfpdd","100gbase-x-qsfp28","100gbase-x-qsfpdd",
                "200gbase-x-qsfp56","200gbase-x-qsfpdd","400gbase-x-qsfp112","400gbase-x-qsfpdd","400gbase-x-osfp",
                "400gbase-x-osfp-rhs","400gbase-x-cdfp","400gbase-x-cfp8","800gbase-x-qsfpdd","800gbase-x-osfp",
                "1000base-kx","2.5gbase-kx","5gbase-kr","10gbase-kr","10gbase-kx4","25gbase-kr","40gbase-kr4",
                "50gbase-kr","100gbase-kp4","100gbase-kr2","100gbase-kr4","ieee802.11a","ieee802.11g","ieee802.11n",
                "ieee802.11ac","ieee802.11ad","ieee802.11ax","ieee802.11ay","ieee802.11be","ieee802.15.1",
                "ieee802.15.4","other-wireless","gsm","cdma","lte","4g","5g","sonet-oc3","sonet-oc12","sonet-oc48",
                "sonet-oc192","sonet-oc768","sonet-oc1920","sonet-oc3840","1gfc-sfp","2gfc-sfp","4gfc-sfp",
                "8gfc-sfpp","16gfc-sfpp","32gfc-sfp28","32gfc-sfpp","64gfc-qsfpp","64gfc-sfpdd","64gfc-sfpp",
                "128gfc-qsfp28","infiniband-sdr","infiniband-ddr","infiniband-qdr","infiniband-fdr10","infiniband-fdr",
                "infiniband-edr","infiniband-hdr","infiniband-ndr","infiniband-xdr","t1","e1","t3","e3","xdsl","docsis",
                "bpon","epon","10g-epon","gpon","xg-pon","xgs-pon","ng-pon2","25g-pon","50g-pon","cisco-stackwise",
                "cisco-stackwise-plus","cisco-flexstack","cisco-flexstack-plus","cisco-stackwise-80","cisco-stackwise-160",
                "cisco-stackwise-320","cisco-stackwise-480","cisco-stackwise-1t","juniper-vcp","extreme-summitstack",
                "extreme-summitstack-128","extreme-summitstack-256","extreme-summitstack-512","other")]
            [string]$type,
        [Parameter(Mandatory=$false)][bool]$enabled,
        [Parameter(Mandatory=$false)][int]$parent,
        [Parameter(Mandatory=$false)][int]$bridge,
        [Parameter(Mandatory=$false)][int]$lag,
        [Parameter(Mandatory=$false)][int]$mtu,
        [Parameter(Mandatory=$false)][string]$mac_address,
        [Parameter(Mandatory=$false)][int]$speed,
        [Parameter(Mandatory=$false)][string]$duplex,
        [Parameter(Mandatory=$false)][string]$wwn,
        [Parameter(Mandatory=$false)][bool]$mgmt_only,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$mode,
        [Parameter(Mandatory=$false)][string]$rf_role,
        [Parameter(Mandatory=$false)][string]$rf_channel,
        [Parameter(Mandatory=$false)][string]$poe_mode,
        [Parameter(Mandatory=$false)][string]$poe_type,
        [Parameter(Mandatory=$false)][int]$rf_channel_frequency,
        [Parameter(Mandatory=$false)][int]$rf_channel_width,
        [Parameter(Mandatory=$false)][int]$tx_power,
        [Parameter(Mandatory=$false)][int]$untagged_vlan,
        [Parameter(Mandatory=$false)][int[]]$tagged_vlans,
        [Parameter(Mandatory=$false)][bool]$mark_connected,
        [Parameter(Mandatory=$false)][int[]]$wireless_lans,
        [Parameter(Mandatory=$false)][int]$vrf,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBDeviceInterfaceAPIPath/"
        body = $PostJson
    }
    Write-Verbose $PostJson
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\dcim\interfaces\New-NBDeviceInterface.ps1' 72
#Region '.\Public\endpoints\dcim\interfaces\Remove-NBDeviceInterface.ps1' -1

function Remove-NBDeviceInterface {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBDeviceInterfaceAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\interfaces\Remove-NBDeviceInterface.ps1' 15
#Region '.\Public\endpoints\dcim\interfaces\Set-NBDeviceInterface.ps1' -1

function Set-NBDeviceInterface {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('device','vdcs','module','name','label','type','enabled','parent','bridge','lag','mtu','mac_address','speed',
                'duplex','wwn','mgmt_only','description','mode','rf_role','rf_channel','poe_mode','poe_type','rf_channel_frequency',
                'rf_channel_width','tx_power','untagged_vlan','tagged_vlans','mark_connected','wireless_lans','vrf','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
    $update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBDeviceInterfaceAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\interfaces\Set-NBDeviceInterface.ps1' 22
#Region '.\Public\endpoints\dcim\locations\Find-NBLocationsContainingName.ps1' -1

function Find-NBLocationsContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    (Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $LocationsAPIPath -name $name).results

}
#EndRegion '.\Public\endpoints\dcim\locations\Find-NBLocationsContainingName.ps1' 10
#Region '.\Public\endpoints\dcim\locations\Get-NBLocationByID.ps1' -1

function Get-NBLocationByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $LocationsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\dcim\locations\Get-NBLocationByID.ps1' 10
#Region '.\Public\endpoints\dcim\locations\Get-NBLocationByName.ps1' -1

function Get-NBLocationByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $LocationsAPIPath -value $name

}
#EndRegion '.\Public\endpoints\dcim\locations\Get-NBLocationByName.ps1' 10
#Region '.\Public\endpoints\dcim\locations\Get-NBLocations.ps1' -1

function Get-NBLocations {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $LocationsAPIPath

}
#EndRegion '.\Public\endpoints\dcim\locations\Get-NBLocations.ps1' 9
#Region '.\Public\endpoints\dcim\locations\New-NBLocation.ps1' -1

function New-NBLocation {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$true,Position=1)][int]$site,
        [Parameter(Mandatory=$false)][int]$parent,
        [Parameter(Mandatory=$false)]
            [ValidateSet('planned','staging','active','decommissioning','retired')]
            [string]$status,
        [Parameter(Mandatory=$false)][int]$tenant,
        [Parameter(Mandatory=$false)][string]$facility,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$LocationsAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\dcim\locations\New-NBLocation.ps1' 32
#Region '.\Public\endpoints\dcim\locations\Remove-NBLocation.ps1' -1

function Remove-NBLocation {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$LocationsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\locations\Remove-NBLocation.ps1' 15
#Region '.\Public\endpoints\dcim\locations\Set-NBLocation.ps1' -1

function Set-NBLocation {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','slug','site','parent','status','tenant','facility','description','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$LocationsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\locations\Set-NBLocation.ps1' 20
#Region '.\Public\endpoints\dcim\manufacturers\Find-NBManufacturersContainingName.ps1' -1

function Find-NBManufacturersContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $ManufacturerAPIPath -name $name

}
#EndRegion '.\Public\endpoints\dcim\manufacturers\Find-NBManufacturersContainingName.ps1' 10
#Region '.\Public\endpoints\dcim\manufacturers\Get-NBManufacturerByID.ps1' -1

function Get-NBManufacturerByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $ManufacturerAPIPath -id $id

}
#EndRegion '.\Public\endpoints\dcim\manufacturers\Get-NBManufacturerByID.ps1' 10
#Region '.\Public\endpoints\dcim\manufacturers\Get-NBManufacturerByName.ps1' -1

function Get-NBManufacturerByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $ManufacturerAPIPath -value $name

}
#EndRegion '.\Public\endpoints\dcim\manufacturers\Get-NBManufacturerByName.ps1' 10
#Region '.\Public\endpoints\dcim\manufacturers\Get-NBManufacturers.ps1' -1

function Get-NBManufacturers {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $ManufacturerAPIPath

}
#EndRegion '.\Public\endpoints\dcim\manufacturers\Get-NBManufacturers.ps1' 9
#Region '.\Public\endpoints\dcim\manufacturers\New-NBManufacturer.ps1' -1

function New-NBManufacturer {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$ManufacturerAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\dcim\manufacturers\New-NBManufacturer.ps1' 25
#Region '.\Public\endpoints\dcim\manufacturers\Remove-NBManufacturer.ps1' -1

function Remove-NBManufacturer {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$ManufacturerAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\manufacturers\Remove-NBManufacturer.ps1' 15
#Region '.\Public\endpoints\dcim\manufacturers\Set-NBManufacturer.ps1' -1

function Set-NBManufacturer {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','slug','description','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$ManufacturerAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\manufacturers\Set-NBManufacturer.ps1' 20
#Region '.\Public\endpoints\dcim\platforms\Find-NBDevicePlatformsContainingName.ps1' -1

function Find-NBDevicePlatformsContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $DevicePlatformAPIPath -name $name

}
#EndRegion '.\Public\endpoints\dcim\platforms\Find-NBDevicePlatformsContainingName.ps1' 10
#Region '.\Public\endpoints\dcim\platforms\Find-NBDeviceRolesContainingName.ps1' -1

function Find-NBDeviceRolesContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $DeviceRolesAPIPath -name $name

}
#EndRegion '.\Public\endpoints\dcim\platforms\Find-NBDeviceRolesContainingName.ps1' 10
#Region '.\Public\endpoints\dcim\platforms\Get-NBDevicePlatformByID.ps1' -1

function Get-NBDevicePlatformByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $DevicePlatformAPIPath -id $id

}
#EndRegion '.\Public\endpoints\dcim\platforms\Get-NBDevicePlatformByID.ps1' 10
#Region '.\Public\endpoints\dcim\platforms\Get-NBDevicePlatformByName.ps1' -1

function Get-NBDevicePlatformByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $DevicePlatformAPIPath -value $name

}
#EndRegion '.\Public\endpoints\dcim\platforms\Get-NBDevicePlatformByName.ps1' 10
#Region '.\Public\endpoints\dcim\platforms\Get-NBDevicePlatforms.ps1' -1

function Get-NBDevicePlatforms {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $DevicePlatformAPIPath

}
#EndRegion '.\Public\endpoints\dcim\platforms\Get-NBDevicePlatforms.ps1' 9
#Region '.\Public\endpoints\dcim\platforms\New-NBDevicePlatform.ps1' -1

function New-NBDevicePlatform {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][int]$manufacturer,
        [Parameter(Mandatory=$false)][int]$config_template,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$DevicePlatformAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\dcim\platforms\New-NBDevicePlatform.ps1' 27
#Region '.\Public\endpoints\dcim\platforms\Remove-NBDevicePlatform.ps1' -1

function Remove-NBDevicePlatform {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$DevicePlatformAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\platforms\Remove-NBDevicePlatform.ps1' 15
#Region '.\Public\endpoints\dcim\platforms\Set-NBDevicePlatform.ps1' -1

function Set-NBDevicePlatform {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','slug','manufacturer','napalm_driver','napalm_args','description','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$DevicePlatformAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\platforms\Set-NBDevicePlatform.ps1' 20
#Region '.\Public\endpoints\dcim\power-feeds\Get-NBPowerFeedByID.ps1' -1

function Get-NBPowerFeedByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBPowerFeedsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\dcim\power-feeds\Get-NBPowerFeedByID.ps1' 10
#Region '.\Public\endpoints\dcim\power-feeds\Get-NBPowerFeedByName.ps1' -1

function Get-NBPowerFeedByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $NBPowerFeedsAPIPath -value $name

}
#EndRegion '.\Public\endpoints\dcim\power-feeds\Get-NBPowerFeedByName.ps1' 10
#Region '.\Public\endpoints\dcim\power-feeds\Get-NBPowerFeeds.ps1' -1

function Get-NBPowerFeeds {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBPowerFeedsAPIPath

}
#EndRegion '.\Public\endpoints\dcim\power-feeds\Get-NBPowerFeeds.ps1' 9
#Region '.\Public\endpoints\dcim\power-feeds\New-NBPowerFeed.ps1' -1

function New-NBPowerFeed {
    <#
    .SYNOPSIS
    Adds a new device object to Netbox
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=1)][int]$power_panel,
        [Parameter(Mandatory=$false)][int]$rack,
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][string]
            [ValidateSet('offline','active','planned','failed')]
            $status,
        [Parameter(Mandatory=$false)][string]
            [ValidateSet('primary','redundant')]
            $type,
        [Parameter(Mandatory=$false)][string]
            [ValidateSet('ac','dc')]
            $supply,
        [Parameter(Mandatory=$false)][string]
            [ValidateSet('single-phase','three-phase')]
            $phase,
        [Parameter(Mandatory=$false)][int]$voltage,
        [Parameter(Mandatory=$false)][int]$amperage,
        [Parameter(Mandatory=$false)][int]$max_utilization,
        [Parameter(Mandatory=$false)][bool]$mark_connected,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][int]$tenant,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    if($PSBoundParameters['mark_connected']) {$PSBoundParameters['mark_connected']=[System.Boolean]$true}
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBPowerFeedsAPIPath/"
        body = $PostJson
    }
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\dcim\power-feeds\New-NBPowerFeed.ps1' 48
#Region '.\Public\endpoints\dcim\power-feeds\Remove-NBPowerFeed.ps1' -1

function Remove-NBPowerFeed {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBPowerFeedsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\power-feeds\Remove-NBPowerFeed.ps1' 15
#Region '.\Public\endpoints\dcim\power-feeds\Set-NBPowerFeed.ps1' -1

function Set-NBPowerFeed {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('power_panel','rack','name','status','type','supply','phase',
                'voltage','amperage','max_utilization','mark_connected','description','tenant',
                'comments','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
    $update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBPowerFeedsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\power-feeds\Set-NBPowerFeed.ps1' 22
#Region '.\Public\endpoints\dcim\power-outlets\Get-NBPowerOutletByID.ps1' -1

function Get-NBPowerOutletByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBPowerOutletsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\dcim\power-outlets\Get-NBPowerOutletByID.ps1' 10
#Region '.\Public\endpoints\dcim\power-outlets\Get-NBPowerOutletByName.ps1' -1

function Get-NBPowerOutletByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $NBPowerOutletsAPIPath -value $name

}
#EndRegion '.\Public\endpoints\dcim\power-outlets\Get-NBPowerOutletByName.ps1' 10
#Region '.\Public\endpoints\dcim\power-outlets\Get-NBPowerOutlets.ps1' -1

function Get-NBPowerOutlets {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBPowerOutletsAPIPath

}
#EndRegion '.\Public\endpoints\dcim\power-outlets\Get-NBPowerOutlets.ps1' 9
#Region '.\Public\endpoints\dcim\power-outlets\New-NBPowerOutlet.ps1' -1

function New-NBPowerOutlet {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][int]$device,
        [Parameter(Mandatory=$false)][int]$module,
        [Parameter(Mandatory=$true,Position=1)][string]$name,
        [Parameter(Mandatory=$false)][string]$label,
        [Parameter(Mandatory=$false)]
            [ValidateSet('iec-60320-c5','iec-60320-c7','iec-60320-c13','iec-60320-c15','iec-60320-c19','iec-60320-c21',
            'iec-60309-p-n-e-4h','iec-60309-p-n-e-6h','iec-60309-p-n-e-9h','iec-60309-2p-e-4h','iec-60309-2p-e-6h',
            'iec-60309-2p-e-9h','iec-60309-3p-e-4h','iec-60309-3p-e-6h','iec-60309-3p-e-9h','iec-60309-3p-n-e-4h',
            'iec-60309-3p-n-e-6h','iec-60309-3p-n-e-9h','iec-60906-1','nbr-14136-10a','nbr-14136-20a','nema-1-15r',
            'nema-5-15r','nema-5-20r','nema-5-30r','nema-5-50r','nema-6-15r','nema-6-20r','nema-6-30r','nema-6-50r',
            'nema-10-30r','nema-10-50r','nema-14-20r','nema-14-30r','nema-14-50r','nema-14-60r','nema-15-15r',
            'nema-15-20r','nema-15-30r','nema-15-50r','nema-15-60r','nema-l1-15r','nema-l5-15r','nema-l5-20r',
            'nema-l5-30r','nema-l5-50r','nema-l6-15r','nema-l6-20r','nema-l6-30r','nema-l6-50r','nema-l10-30r',
            'nema-l14-20r','nema-l14-30r','nema-l14-50r','nema-l14-60r','nema-l15-20r','nema-l15-30r','nema-l15-50r',
            'nema-l15-60r','nema-l21-20r','nema-l21-30r','nema-l22-20r','nema-l22-30r','CS6360C','CS6364C','CS8164C',
            'CS8264C','CS8364C','CS8464C','ita-e','ita-f','ita-g','ita-h','ita-i','ita-j','ita-k','ita-l','ita-m',
            'ita-n','ita-o','ita-multistandard','usb-a','usb-micro-b','usb-c','molex-micro-fit-1x2',
            'molex-micro-fit-2x2','molex-micro-fit-2x4','dc-terminal','eaton-c39','hdot-cx','saf-d-grid',
            'neutrik-powercon-20a','neutrik-powercon-32a','neutrik-powercon-true1','neutrik-powercon-true1-top',
            'ubiquiti-smartpower','hardwired','other')]
            [string]$type,
        [Parameter(Mandatory=$false)][hashtable]$power_port,
        [Parameter(Mandatory=$false)]
            [ValidateSet('A','B','C')]
            [string]$feed_leg,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][bool]$mark_connected,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBPowerOutletsAPIPath/"
        body = $PostJson
    }
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\dcim\power-outlets\New-NBPowerOutlet.ps1' 48
#Region '.\Public\endpoints\dcim\power-outlets\Remove-NBPowerOutlet.ps1' -1

function Remove-NBPowerOutlet {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBPowerOutletsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\power-outlets\Remove-NBPowerOutlet.ps1' 15
#Region '.\Public\endpoints\dcim\power-outlets\Set-NBPowerOutlet.ps1' -1

function Set-NBPowerOutlet {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('device','module','name','label','type','power_port','feed_leg','description','mark_connected','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
    $update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBPowerOutletsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\power-outlets\Set-NBPowerOutlet.ps1' 20
#Region '.\Public\endpoints\dcim\power-panels\Get-NBPowerPanelByID.ps1' -1

function Get-NBPowerPanelByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBPowerPanelsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\dcim\power-panels\Get-NBPowerPanelByID.ps1' 10
#Region '.\Public\endpoints\dcim\power-panels\Get-NBPowerPanelByName.ps1' -1

function Get-NBPowerPanelByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $NBPowerPanelsAPIPath -value $name

}
#EndRegion '.\Public\endpoints\dcim\power-panels\Get-NBPowerPanelByName.ps1' 10
#Region '.\Public\endpoints\dcim\power-panels\Get-NBPowerPanels.ps1' -1

function Get-NBPowerPanels {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBPowerPanelsAPIPath

}
#EndRegion '.\Public\endpoints\dcim\power-panels\Get-NBPowerPanels.ps1' 9
#Region '.\Public\endpoints\dcim\power-panels\New-NBPowerPanel.ps1' -1

function New-NBPowerPanel {
    <#
    .SYNOPSIS
    Adds a new device object to Netbox
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][int]$site,
        [Parameter(Mandatory=$true,Position=1)][string]$name,
        [Parameter(Mandatory=$false)][int]$location,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBPowerPanelsAPIPath/"
        body = $PostJson
    }
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\dcim\power-panels\New-NBPowerPanel.ps1' 28
#Region '.\Public\endpoints\dcim\power-panels\Remove-NBPowerPanel.ps1' -1

function Remove-NBPowerPanel {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBPowerPanelsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\power-panels\Remove-NBPowerPanel.ps1' 15
#Region '.\Public\endpoints\dcim\power-panels\Set-NBPowerPanel.ps1' -1

function Set-NBPowerPanel {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('site','location','name','description','tags')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
    $update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBPowerPanelsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\power-panels\Set-NBPowerPanel.ps1' 20
#Region '.\Public\endpoints\dcim\rack-elevations\Get-NBRackElevation.ps1' -1

function Get-NBRackElevation {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Get'
        URI = "$($Connection.ApiBaseURL)/$RacksAPIPath/$id/elevation/"
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection).results

}
#EndRegion '.\Public\endpoints\dcim\rack-elevations\Get-NBRackElevation.ps1' 14
#Region '.\Public\endpoints\dcim\rack-reservations\Get-NBRackReservationByID.ps1' -1

function Get-NBRackReservationByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $RackReservationsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\dcim\rack-reservations\Get-NBRackReservationByID.ps1' 10
#Region '.\Public\endpoints\dcim\rack-reservations\Get-NBRackReservations.ps1' -1

function Get-NBRackReservations {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $RackReservationsAPIPath

}
#EndRegion '.\Public\endpoints\dcim\rack-reservations\Get-NBRackReservations.ps1' 9
#Region '.\Public\endpoints\dcim\rack-reservations\New-NBRackReservation.ps1' -1

function New-NBRackReservation {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][int]$rack,
        [Parameter(Mandatory=$true,Position=1)]
            [ValidateRange(0,32767)]
            [int]$units,
        [Parameter(Mandatory=$true,Position=3)][int]$user,
        [Parameter(Mandatory=$false)][int]$tenant,
        [Parameter(Mandatory=$true,Position=4)][string]$description,
        [Parameter(Mandatory=$false)][int]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$RackReservationsAPIPath/"
        body = $PostJson
    }
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\dcim\rack-reservations\New-NBRackReservation.ps1' 29
#Region '.\Public\endpoints\dcim\rack-reservations\Remove-NBRackReservation.ps1' -1

function Remove-NBRackReservation {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$RackReservationsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\rack-reservations\Remove-NBRackReservation.ps1' 15
#Region '.\Public\endpoints\dcim\rack-reservations\Set-NBRackReservation.ps1' -1

function Set-NBRackReservation {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('rack','units','user','tenant','description','comments','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$RackReservationsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\rack-reservations\Set-NBRackReservation.ps1' 20
#Region '.\Public\endpoints\dcim\rack-roles\Find-NBRackRolesContainingName.ps1' -1

function Find-NBRackRolesContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $RackRolesAPIPath -name $name

}
#EndRegion '.\Public\endpoints\dcim\rack-roles\Find-NBRackRolesContainingName.ps1' 10
#Region '.\Public\endpoints\dcim\rack-roles\Get-NBRackRoleByID.ps1' -1

function Get-NBRackRoleByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $RackRolesAPIPath -id $id

}
#EndRegion '.\Public\endpoints\dcim\rack-roles\Get-NBRackRoleByID.ps1' 10
#Region '.\Public\endpoints\dcim\rack-roles\Get-NBRackRoleByName.ps1' -1

function Get-NBRackRoleByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $RackRolesAPIPath -value $name

}
#EndRegion '.\Public\endpoints\dcim\rack-roles\Get-NBRackRoleByName.ps1' 10
#Region '.\Public\endpoints\dcim\rack-roles\Get-NBRackRoles.ps1' -1

function Get-NBRackRoles {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $RackRolesAPIPath

}
#EndRegion '.\Public\endpoints\dcim\rack-roles\Get-NBRackRoles.ps1' 9
#Region '.\Public\endpoints\dcim\rack-roles\New-NBRackRole.ps1' -1

function New-NBRackRole {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][string]$color,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$RackRolesAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\dcim\rack-roles\New-NBRackRole.ps1' 26
#Region '.\Public\endpoints\dcim\rack-roles\Remove-NBRackRole.ps1' -1

function Remove-NBRackRole {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$RackRolesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\rack-roles\Remove-NBRackRole.ps1' 15
#Region '.\Public\endpoints\dcim\rack-roles\Set-NBRackRole.ps1' -1

function Set-NBRackRole {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','slug','color','description','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$RackRolesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\rack-roles\Set-NBRackRole.ps1' 20
#Region '.\Public\endpoints\dcim\rack-types\Get-NBRackTypeByID.ps1' -1

function Get-NBRackTypeByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBRackTypesAPIPath -id $id

}
#EndRegion '.\Public\endpoints\dcim\rack-types\Get-NBRackTypeByID.ps1' 10
#Region '.\Public\endpoints\dcim\rack-types\Get-NBRackTypeByName.ps1' -1

function Get-NBRackTypeByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $NBRackTypesAPIPath -value $name

}
#EndRegion '.\Public\endpoints\dcim\rack-types\Get-NBRackTypeByName.ps1' 10
#Region '.\Public\endpoints\dcim\rack-types\Get-NBRackTypes.ps1' -1

function Get-NBRackTypes {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBRackTypesAPIPath

}
#EndRegion '.\Public\endpoints\dcim\rack-types\Get-NBRackTypes.ps1' 9
#Region '.\Public\endpoints\dcim\rack-types\New-NBRackType.ps1' -1

function New-NBRackType {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][int]$manufacturer,
        [Parameter(Mandatory=$true,Position=1)][string]$model,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$true,Position=2)]
            [ValidateSet('2-post-frame','4-post-frame','4-post-cabinet','wall-frame','wall-frame-vertical','wall-cabinet','wall-cabinet-vertical')]
            [string]$form_factor,
        [Parameter(Mandatory=$false)]
            [ValidateSet(10,19,21,23)]
            [int]$width,
        [Parameter(Mandatory=$false)][int]$u_height,
        [Parameter(Mandatory=$false)][int]$starting_unit,
        [Parameter(Mandatory=$false)][bool]$desc_units,
        [Parameter(Mandatory=$false)][int]$outer_width,
        [Parameter(Mandatory=$false)][int]$outer_depth,
        [Parameter(Mandatory=$false)]
            [ValidateSet('mm','in')]
            [string]$outer_unit,
        [Parameter(Mandatory=$false)][double]$weight,
        [Parameter(Mandatory=$false)][double]$max_weight,
        [Parameter(Mandatory=$false)]
            [ValidateSet('kg','g','lb','oz')]
            [string]$weight_unit,
        [Parameter(Mandatory=$false)][int]$mounting_depth,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $model
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBRackTypesAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\dcim\rack-types\New-NBRackType.ps1' 47
#Region '.\Public\endpoints\dcim\rack-types\Remove-NBRackType.ps1' -1

function Remove-NBRackType {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBRackTypesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\rack-types\Remove-NBRackType.ps1' 15
#Region '.\Public\endpoints\dcim\rack-types\Set-NBRackType.ps1' -1

function Set-NBRackType {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('manufacturer','model','slug','description','form_factor','width','u_height','starting_unit','desc_units','outer_width',
            'outer_depth','outer_unit','weight','max_weight','weight_unit','mounting_depth','comments','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2,
            HelpMessage="A valid value for the attribute you want to change. If the expected value is an array, like for tags, pass it as '1,2' or whatever the ids of the tags you wish to set are."
        )][string]$value
    )
    $update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBRackTypesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\rack-types\Set-NBRackType.ps1' 23
#Region '.\Public\endpoints\dcim\racks\Find-NBRacksContainingName.ps1' -1

function Find-NBRacksContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $RacksAPIPath -name $name

}
#EndRegion '.\Public\endpoints\dcim\racks\Find-NBRacksContainingName.ps1' 10
#Region '.\Public\endpoints\dcim\racks\Get-NBRackByID.ps1' -1

function Get-NBRackByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $RacksAPIPath -id $id

}
#EndRegion '.\Public\endpoints\dcim\racks\Get-NBRackByID.ps1' 10
#Region '.\Public\endpoints\dcim\racks\Get-NBRackByName.ps1' -1

function Get-NBRackByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $RacksAPIPath -value $name

}
#EndRegion '.\Public\endpoints\dcim\racks\Get-NBRackByName.ps1' 10
#Region '.\Public\endpoints\dcim\racks\Get-NBRacks.ps1' -1

function Get-NBRacks {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $RacksAPIPath

}
#EndRegion '.\Public\endpoints\dcim\racks\Get-NBRacks.ps1' 9
#Region '.\Public\endpoints\dcim\racks\New-NBRack.ps1' -1

function New-NBRack {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][string]$facility_id,
        [Parameter(Mandatory=$true,Position=1)][int]$site,
        [Parameter(Mandatory=$false)][int]$location,
        [Parameter(Mandatory=$true,Position=2)][int]$tenant,
        [Parameter(Mandatory=$false)]
            [ValidateSet('reserved','available','planned','active','deprecated')]
            [string]$status,
        [Parameter(Mandatory=$false)][int]$role,
        [Parameter(Mandatory=$false)][string]$serial,
        [Parameter(Mandatory=$false)][string]$asset_tag,
        [Parameter(Mandatory=$false)][int]$rack_type,
        [Parameter(Mandatory=$false)]
        [ValidateSet('2-post-frame','4-post-frame','4-post-cabinet','wall-frame','wall-frame-vertical','wall-cabinet','wall-cabinet-vertical')]
        [string]$form_factor,
        [Parameter(Mandatory=$false)][int]$width,
        [Parameter(Mandatory=$false)][int]$u_height,
        [Parameter(Mandatory=$false)][int]$starting_unit,
        [Parameter(Mandatory=$false)][int]$weight,
        [Parameter(Mandatory=$false)][int]$max_weight,
        [Parameter(Mandatory=$false)]
            [ValidateSet('kg','g','lb','oz')]
            [string]$weight_unit,
        [Parameter(Mandatory=$false)][bool]$desc_units,
        [Parameter(Mandatory=$false)][int]$outer_width,
        [Parameter(Mandatory=$false)][int]$outer_depth,
        [Parameter(Mandatory=$false)]
            [ValidateSet('mm','in')]
            [string]$outer_unit,
        [Parameter(Mandatory=$false)][int]$mounting_depth,
        [Parameter(Mandatory=$false)]
            [ValidateSet('front-to-rear','rear-to-front')]
            [string]$airflow,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$RacksAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\dcim\racks\New-NBRack.ps1' 57
#Region '.\Public\endpoints\dcim\racks\Remove-NBRack.ps1' -1

function Remove-NBRack {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$RacksAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\racks\Remove-NBRack.ps1' 15
#Region '.\Public\endpoints\dcim\racks\Set-NBRack.ps1' -1

function Set-NBRack {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','facility_id','site','location','tenant','status',
            'role','serial','asset_tag','rack_type','form_factor','width','u_height','starting_unit',
            'weight','max_weight','weight_unit','desc_units','outer_width','outer_depth',
            'outer_unit','mounting_depth','airflow','description','comments','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$RacksAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\racks\Set-NBRack.ps1' 23
#Region '.\Public\endpoints\dcim\regions\Find-NBRegionsContainingName.ps1' -1

function Find-NBRegionsContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $regionsAPIPath -name $name

}
#EndRegion '.\Public\endpoints\dcim\regions\Find-NBRegionsContainingName.ps1' 10
#Region '.\Public\endpoints\dcim\regions\Get-NBRegionByID.ps1' -1

function Get-NBRegionByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $regionsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\dcim\regions\Get-NBRegionByID.ps1' 10
#Region '.\Public\endpoints\dcim\regions\Get-NBRegionByName.ps1' -1

function Get-NBRegionByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $regionsAPIPath -value $name

}
#EndRegion '.\Public\endpoints\dcim\regions\Get-NBRegionByName.ps1' 10
#Region '.\Public\endpoints\dcim\regions\Get-NBRegions.ps1' -1

function Get-NBRegions {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $regionsAPIPath

}
#EndRegion '.\Public\endpoints\dcim\regions\Get-NBRegions.ps1' 9
#Region '.\Public\endpoints\dcim\regions\New-NBRegion.ps1' -1

function New-NBRegion {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][int]$parent,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$regionsAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\dcim\regions\New-NBRegion.ps1' 26
#Region '.\Public\endpoints\dcim\regions\Remove-NBRegion.ps1' -1

function Remove-NBRegion {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$regionsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\regions\Remove-NBRegion.ps1' 15
#Region '.\Public\endpoints\dcim\regions\Set-NBRegion.ps1' -1

function Set-NBRegion {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','slug','parent','description','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$regionsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\regions\Set-NBRegion.ps1' 20
#Region '.\Public\endpoints\dcim\site-groups\Find-NBSiteGroupsContainingName.ps1' -1

function Find-NBSiteGroupsContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $SiteGroupsAPIPath -name $name

}
#EndRegion '.\Public\endpoints\dcim\site-groups\Find-NBSiteGroupsContainingName.ps1' 10
#Region '.\Public\endpoints\dcim\site-groups\Get-NBSiteGroupByID.ps1' -1

function Get-NBSiteGroupByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $SiteGroupsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\dcim\site-groups\Get-NBSiteGroupByID.ps1' 10
#Region '.\Public\endpoints\dcim\site-groups\Get-NBSiteGroupByName.ps1' -1

function Get-NBSiteGroupByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $SiteGroupsAPIPath -value $name

}
#EndRegion '.\Public\endpoints\dcim\site-groups\Get-NBSiteGroupByName.ps1' 10
#Region '.\Public\endpoints\dcim\site-groups\Get-NBSiteGroups.ps1' -1

function Get-NBSiteGroups {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $SiteGroupsAPIPath

}
#EndRegion '.\Public\endpoints\dcim\site-groups\Get-NBSiteGroups.ps1' 9
#Region '.\Public\endpoints\dcim\site-groups\New-NBSiteGroup.ps1' -1

function New-NBSiteGroup {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][int]$parent,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$SiteGroupsAPIPath/"
        body = $PostJson
    }
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\dcim\site-groups\New-NBSiteGroup.ps1' 25
#Region '.\Public\endpoints\dcim\site-groups\Remove-NBSiteGroup.ps1' -1

function Remove-NBSiteGroup {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$SiteGroupsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\site-groups\Remove-NBSiteGroup.ps1' 15
#Region '.\Public\endpoints\dcim\site-groups\Set-NBSiteGroup.ps1' -1

function Set-NBSiteGroup {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','slug','description','parent','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$SiteGroupsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\site-groups\Set-NBSiteGroup.ps1' 20
#Region '.\Public\endpoints\dcim\sites\Find-NBSitesContainingName.ps1' -1

function Find-NBSitesContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $SitesAPIPath -name $name

}
#EndRegion '.\Public\endpoints\dcim\sites\Find-NBSitesContainingName.ps1' 10
#Region '.\Public\endpoints\dcim\sites\Get-NBSiteByID.ps1' -1

function Get-NBSiteByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $SitesAPIPath -id $id

}
#EndRegion '.\Public\endpoints\dcim\sites\Get-NBSiteByID.ps1' 10
#Region '.\Public\endpoints\dcim\sites\Get-NBSiteByName.ps1' -1

function Get-NBSiteByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $SitesAPIPath -value $name

}
#EndRegion '.\Public\endpoints\dcim\sites\Get-NBSiteByName.ps1' 10
#Region '.\Public\endpoints\dcim\sites\Get-NBSites.ps1' -1

function Get-NBSites {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $SitesAPIPath

}
#EndRegion '.\Public\endpoints\dcim\sites\Get-NBSites.ps1' 9
#Region '.\Public\endpoints\dcim\sites\New-NBSite.ps1' -1

function New-NBSite {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('planned','staging','active','decommissioning','retired')]
            $status,
        [Parameter(Mandatory=$false)][int]$region,
        [Parameter(Mandatory=$false)][int]$group,
        [Parameter(Mandatory=$false)][int]$tenant,
        [Parameter(Mandatory=$false)][string]$facility,
        [Parameter(Mandatory=$false)][string]$time_zone,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$physical_address,
        [Parameter(Mandatory=$false)][string]$shipping_address,
        [Parameter(Mandatory=$false)][double]$latitude,
        [Parameter(Mandatory=$false)][double]$longitude,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][int[]]$asns,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$SitesAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\dcim\sites\New-NBSite.ps1' 39
#Region '.\Public\endpoints\dcim\sites\Remove-NBSite.ps1' -1

function Remove-NBSite {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$SitesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\sites\Remove-NBSite.ps1' 15
#Region '.\Public\endpoints\dcim\sites\Set-NBSite.ps1' -1

function Set-NBSite {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','slug','status','region','group','tenant','facility',
            'time_zone','description','physical_address','shipping_address','latitude',
            'longitude','comments','asns','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$SitesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\sites\Set-NBSite.ps1' 22
#Region '.\Public\endpoints\dcim\virtual-chassis\Find-NBVirtualChassisContainingName.ps1' -1

function Find-NBVirtualChassisContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $NBVirtualChassisAPIPath -name $name

}
#EndRegion '.\Public\endpoints\dcim\virtual-chassis\Find-NBVirtualChassisContainingName.ps1' 10
#Region '.\Public\endpoints\dcim\virtual-chassis\Get-NBVirtualChassis.ps1' -1

function Get-NBVirtualChassis {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBVirtualChassisAPIPath

}
#EndRegion '.\Public\endpoints\dcim\virtual-chassis\Get-NBVirtualChassis.ps1' 9
#Region '.\Public\endpoints\dcim\virtual-chassis\Get-NBVirtualChassisByID.ps1' -1

function Get-NBVirtualChassisByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBVirtualChassisAPIPath -id $id

}
#EndRegion '.\Public\endpoints\dcim\virtual-chassis\Get-NBVirtualChassisByID.ps1' 10
#Region '.\Public\endpoints\dcim\virtual-chassis\Get-NBVirtualChassisByName.ps1' -1

function Get-NBVirtualChassisByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $NBVirtualChassisAPIPath -value $name

}
#EndRegion '.\Public\endpoints\dcim\virtual-chassis\Get-NBVirtualChassisByName.ps1' 10
#Region '.\Public\endpoints\dcim\virtual-chassis\New-NBVirtualChassis.ps1' -1

function New-NBVirtualChassis {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][string]$domain,
        [Parameter(Mandatory=$false)][int]$master,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBVirtualChassisAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\dcim\virtual-chassis\New-NBVirtualChassis.ps1' 27
#Region '.\Public\endpoints\dcim\virtual-chassis\Remove-NBVirtualChassis.ps1' -1

function Remove-NBVirtualChassis {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBVirtualChassisAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\dcim\virtual-chassis\Remove-NBVirtualChassis.ps1' 15
#Region '.\Public\endpoints\dcim\virtual-chassis\Set-NBVirtualChassis.ps1' -1

function Set-NBVirtualChassis {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','domain','master','description','comments','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBVirtualChassisAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)
}
#EndRegion '.\Public\endpoints\dcim\virtual-chassis\Set-NBVirtualChassis.ps1' 19
#Region '.\Public\endpoints\extras\object-types\Get-NBObjectTypeByID.ps1' -1

function Get-NBObjectTypeByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBObjectTypesAPIPath -id $id

}
#EndRegion '.\Public\endpoints\extras\object-types\Get-NBObjectTypeByID.ps1' 10
#Region '.\Public\endpoints\extras\object-types\Get-NBObjectTypes.ps1' -1

function Get-NBObjectTypes {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBObjectTypesAPIPath

}
#EndRegion '.\Public\endpoints\extras\object-types\Get-NBObjectTypes.ps1' 9
#Region '.\Public\endpoints\extras\tags\Get-NBTagByID.ps1' -1

function Get-NBTagByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBTagsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\extras\tags\Get-NBTagByID.ps1' 10
#Region '.\Public\endpoints\extras\tags\Get-NBTags.ps1' -1

function Get-NBTags {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBTagsAPIPath

}
#EndRegion '.\Public\endpoints\extras\tags\Get-NBTags.ps1' 9
#Region '.\Public\endpoints\extras\tags\New-NBTag.ps1' -1

function New-NBTag {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][string]$color,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false,
            HelpMessage="An array of strings in the format <applabel>.<model>, ex: 'vpn.tunnel','vpn.tunnelgroup' ")]
            [string[]]$object_types,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBTagsAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject
}
#EndRegion '.\Public\endpoints\extras\tags\New-NBTag.ps1' 26
#Region '.\Public\endpoints\extras\tags\Remove-NBTag.ps1' -1

function Remove-NBTag {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBTagsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\extras\tags\Remove-NBTag.ps1' 15
#Region '.\Public\endpoints\extras\tags\Set-NBTag.ps1' -1

function Set-NBTag {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','slug','color','description','object_types')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
    $update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBTagsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\extras\tags\Set-NBTag.ps1' 20
#Region '.\Public\endpoints\ipam\aggregates\Get-NBAggregateByID.ps1' -1

function Get-NBAggregateByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBAggregateAPIPath -id $id

}
#EndRegion '.\Public\endpoints\ipam\aggregates\Get-NBAggregateByID.ps1' 10
#Region '.\Public\endpoints\ipam\aggregates\Get-NBAggregateByPrefix.ps1' -1

function Get-NBAggregateByPrefix {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$prefix
    )
    Get-APIItemByQuery -apiConnection $Connection -RelativePath $NBAggregateAPIPath -field prefix -value $prefix

}
#EndRegion '.\Public\endpoints\ipam\aggregates\Get-NBAggregateByPrefix.ps1' 10
#Region '.\Public\endpoints\ipam\aggregates\Get-NBAggregates.ps1' -1

function Get-NBAggregates {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBAggregateAPIPath

}
#EndRegion '.\Public\endpoints\ipam\aggregates\Get-NBAggregates.ps1' 9
#Region '.\Public\endpoints\ipam\aggregates\New-NBAggregate.ps1' -1

function New-NBAggregate {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$prefix,
        [Parameter(Mandatory=$true,Position=1)][int]$rir,
        [Parameter(Mandatory=$false)][int]$tenant,
        [Parameter(Mandatory=$false)][string]$date_added,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBAggregateAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\ipam\aggregates\New-NBAggregate.ps1' 28
#Region '.\Public\endpoints\ipam\aggregates\Remove-NBAggregate.ps1' -1

function Remove-NBAggregate {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBAggregateAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\aggregates\Remove-NBAggregate.ps1' 15
#Region '.\Public\endpoints\ipam\aggregates\Set-NBAggregate.ps1' -1

function Set-NBAggregate {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('prefix','rir','tenant','date_added','description','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBAggregateAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\aggregates\Set-NBAggregate.ps1' 20
#Region '.\Public\endpoints\ipam\asns\Find-NBASNsContainingName.ps1' -1

function Find-NBASNsContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$asn
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $ASNsAPIPath -name $asn

}
#EndRegion '.\Public\endpoints\ipam\asns\Find-NBASNsContainingName.ps1' 10
#Region '.\Public\endpoints\ipam\asns\Get-NBASNByID.ps1' -1

function Get-NBASNByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $ASNsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\ipam\asns\Get-NBASNByID.ps1' 10
#Region '.\Public\endpoints\ipam\asns\Get-NBASNByName.ps1' -1

function Get-NBASNByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$asn
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $ASNsAPIPath -value $asn

}
#EndRegion '.\Public\endpoints\ipam\asns\Get-NBASNByName.ps1' 10
#Region '.\Public\endpoints\ipam\asns\Get-NBASNs.ps1' -1

function Get-NBASNs {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $ASNsAPIPath

}
#EndRegion '.\Public\endpoints\ipam\asns\Get-NBASNs.ps1' 9
#Region '.\Public\endpoints\ipam\asns\New-NBASN.ps1' -1

function New-NBASN {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][int]$asn,
        [Parameter(Mandatory=$true,Position=0)][int]$rir,
        [Parameter(Mandatory=$true,Position=0)][int]$tenant,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$ASNsAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\ipam\asns\New-NBASN.ps1' 27
#Region '.\Public\endpoints\ipam\asns\Remove-NBASN.ps1' -1

function Remove-NBASN {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$ASNsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\asns\Remove-NBASN.ps1' 15
#Region '.\Public\endpoints\ipam\asns\Set-NBASN.ps1' -1

function Set-NBASN {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('asn','rir','tenant','description','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$ASNsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\asns\Set-NBASN.ps1' 20
#Region '.\Public\endpoints\ipam\ip-addresses\Get-NBIPAddressByID.ps1' -1

function Get-NBIPAddressByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Write-Verbose "[$($MyInvocation.MyCommand.Name)]"
    Get-ApiItemByID -apiConnection $Connection -RelativePath $IPAddressAPIPath -id $id

}
#EndRegion '.\Public\endpoints\ipam\ip-addresses\Get-NBIPAddressByID.ps1' 11
#Region '.\Public\endpoints\ipam\ip-addresses\Get-NBIPAddressByName.ps1' -1

function Get-NBIPAddressByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Write-Verbose "[$($MyInvocation.MyCommand.Name)]"
    #Get-ApiItemByName -apiConnection $Connection -RelativePath $IPAddressAPIPath -value $name
    (Get-APIItemByQuery -apiConnection $Connection -RelativePath $IPAddressAPIPath -field 'address' -value $name).results

}
#EndRegion '.\Public\endpoints\ipam\ip-addresses\Get-NBIPAddressByName.ps1' 12
#Region '.\Public\endpoints\ipam\ip-addresses\Get-NBIPAddresses.ps1' -1

function Get-NBIPAddresses {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Write-Verbose "[$($MyInvocation.MyCommand.Name)]"
    Get-ApiItems -apiConnection $Connection -RelativePath $IPAddressAPIPath

}
#EndRegion '.\Public\endpoints\ipam\ip-addresses\Get-NBIPAddresses.ps1' 10
#Region '.\Public\endpoints\ipam\ip-addresses\Get-NBIPAddressForDeviceInterface.ps1' -1

function Get-NBIPAddressForDeviceInterface {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$vmintid
    )
    Write-Verbose "[$($MyInvocation.MyCommand.Name)]"
    $intType=(Get-NBObjectTypes|Where-Object {$_.model -eq "interface"}).id
    $RelativePath = $IPAddressAPIPath
    $QueryArguments=@{
        assigned_object_type = $intType
        assigned_object_id = $vmintid
    }
    $ArgumentString = New-ArgumentString $QueryArguments
    $restParams = @{
        Method               = 'get'
        URI                  = "$($Connection.ApiBaseURL)/$RelativePath/?$ArgumentString"
        SkipCertificateCheck = $apiConnection.SkipCertificateCheck
    }
    Write-Verbose "[$($MyInvocation.MyCommand.Name)] Making API search call using '$field' looking for '$value'."
    (Invoke-CustomRequest $restParams -Connection $Connection).results

}
#EndRegion '.\Public\endpoints\ipam\ip-addresses\Get-NBIPAddressForDeviceInterface.ps1' 24
#Region '.\Public\endpoints\ipam\ip-addresses\Get-NBIPAddressForVMInterface.ps1' -1

function Get-NBIPAddressForVMInterface {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$vmintid
    )
    Write-Verbose "[$($MyInvocation.MyCommand.Name)]"
    $intType=(Get-NBObjectTypes|Where-Object {$_.model -eq "vminterface"}).id
    $RelativePath = $IPAddressAPIPath
    $QueryArguments=@{
        assigned_object_type = $intType
        assigned_object_id = $vmintid
    }
    $ArgumentString = New-ArgumentString $QueryArguments
    $restParams = @{
        Method               = 'get'
        URI                  = "$($Connection.ApiBaseURL)/$RelativePath/?$ArgumentString"
        SkipCertificateCheck = $apiConnection.SkipCertificateCheck
    }
    Write-Verbose "[$($MyInvocation.MyCommand.Name)] Making API search call using '$field' looking for '$value'."
    (Invoke-CustomRequest $restParams -Connection $Connection).results

}
#EndRegion '.\Public\endpoints\ipam\ip-addresses\Get-NBIPAddressForVMInterface.ps1' 24
#Region '.\Public\endpoints\ipam\ip-addresses\New-NBIPAddress.ps1' -1

<#
.SYNOPSIS
    Assigned Object Type could be any of several fields, but usually 'virtualization.vminterface' or 'dcim.interface'
#>

function New-NBIPAddress {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$address,
        [Parameter(Mandatory=$false)][int]$vrf,
        [Parameter(Mandatory=$false)][int]$tenant,
        [Parameter(Mandatory=$false)]
            [ValidateSet('active','reserved','deprecated','dhcp','slaac')]
            [string]$status,
        [Parameter(Mandatory=$false)]
            [ValidateSet('loopback','secondary','anycast','vip','vrrp','hsrp','glbp','carp')]
            [string]$role,
        [Parameter(Mandatory=$false)]
            [ValidateSet('virtualization.vminterface','dcim.interface')]
            [string]$assigned_object_type,
        [Parameter(Mandatory=$false)][int]$assigned_object_id,
        [Parameter(Mandatory=$false)][int]$nat_inside,
        [Parameter(Mandatory=$false)][string]$dns_name,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Write-Verbose "[$($MyInvocation.MyCommand.Name)]"
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$IPAddressAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\ipam\ip-addresses\New-NBIPAddress.ps1' 44
#Region '.\Public\endpoints\ipam\ip-addresses\Remove-NBIPAddress.ps1' -1

function Remove-NBIPAddress {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Write-Verbose "[$($MyInvocation.MyCommand.Name)]"
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$IPAddressAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\ip-addresses\Remove-NBIPAddress.ps1' 16
#Region '.\Public\endpoints\ipam\ip-addresses\Set-NBIPAddress.ps1' -1

function Set-NBIPAddress {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('address','vrf','tenant','status','role','nat_inside','dns_name','description','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
    $update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$IPAddressAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\ip-addresses\Set-NBIPAddress.ps1' 20
#Region '.\Public\endpoints\ipam\ip-addresses\Set-NBIPAddressParent.ps1' -1

function Set-NBIPAddressParent {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('dcim.interface','virtualization.vminterface')]
            $InterFaceType,
        [Parameter(Mandatory=$true,Position=2)][string]$interface
    )
    Write-Verbose "[$($MyInvocation.MyCommand.Name)]"
    $update=@{
        assigned_object_type = "$InterFaceType"
        assigned_object_id = $interface
    }
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$IPAddressAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\ip-addresses\Set-NBIPAddressParent.ps1' 24
#Region '.\Public\endpoints\ipam\ip-ranges\Get-NBIPRangeByID.ps1' -1

function Get-NBIPRangeByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $IPRangesAPIPath -id $id

}
#EndRegion '.\Public\endpoints\ipam\ip-ranges\Get-NBIPRangeByID.ps1' 10
#Region '.\Public\endpoints\ipam\ip-ranges\Get-NBIPRangeByName.ps1' -1

function Get-NBIPRangeByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $IPRangesAPIPath -value $name

}
#EndRegion '.\Public\endpoints\ipam\ip-ranges\Get-NBIPRangeByName.ps1' 10
#Region '.\Public\endpoints\ipam\ip-ranges\Get-NBIPRanges.ps1' -1

function Get-NBIPRanges {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $IPRangesAPIPath

}
#EndRegion '.\Public\endpoints\ipam\ip-ranges\Get-NBIPRanges.ps1' 9
#Region '.\Public\endpoints\ipam\ip-ranges\New-NBIPRange.ps1' -1

function New-NBIPRange {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$start_address,
        [Parameter(Mandatory=$true,Position=1)][string]$end_address,
        [Parameter(Mandatory=$false)][int]$vrf,
        [Parameter(Mandatory=$false)][int]$tenant,
        [Parameter(Mandatory=$true,Position=2)][string][ValidateSet('active','reserved','deprecated')]$status,
        [Parameter(Mandatory=$false)][int]$role,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][bool]$mark_utilized,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$IPRangesAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\ipam\ip-ranges\New-NBIPRange.ps1' 31
#Region '.\Public\endpoints\ipam\ip-ranges\Remove-NBIPRange.ps1' -1

function Remove-NBIPRange {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$IPRangesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\ip-ranges\Remove-NBIPRange.ps1' 15
#Region '.\Public\endpoints\ipam\ip-ranges\Set-NBIPRange.ps1' -1

function Set-NBIPRange {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('start_address','end_address','vrf','tenant','status','role','description','comments','tags','custom_fields','mark_utilized')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$IPRangesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\ip-ranges\Set-NBIPRange.ps1' 20
#Region '.\Public\endpoints\ipam\prefixes\Get-NBPrefixAvailableIPs.ps1' -1

function Get-NBPrefixAvailablePrefixes {
    <#
        .SYNOPSIS
            A convenience method for returning available prefixes within a prefix
     
        .DESCRIPTION
            Will return any available prefixes within a prefix.
     
        .PARAMETER PrefixId
            Parent Netbox IP Prefix ID
     
        .EXAMPLE
            Get-NBPrefixAvailablePrefixes -PrefixId (Get-NBPrefixByCIDR -CIDR '10.0.0.0/14').id
     
        .NOTES
            Additional information about the function.
    #>

    
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$PrefixId
    )
    Get-ApiItemByPath -apiConnection $Connection -Path $PrefixesAPIPath/$PrefixId/available-ips/
}
#EndRegion '.\Public\endpoints\ipam\prefixes\Get-NBPrefixAvailableIPs.ps1' 25
#Region '.\Public\endpoints\ipam\prefixes\Get-NBPrefixAvailablePrefixes.ps1' -1

function Get-NBPrefixAvailablePrefixes {
    <#
        .SYNOPSIS
            A convenience method for returning available prefixes within a prefix
     
        .DESCRIPTION
            Will return any available prefixes within a prefix.
     
        .PARAMETER PrefixId
            Parent Netbox IP Prefix ID
     
        .EXAMPLE
            Get-NBPrefixAvailablePrefixes -PrefixId (Get-NBPrefixByCIDR -CIDR '10.0.0.0/14').id
     
        .NOTES
            Additional information about the function.
    #>

    
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$PrefixId
    )
    Get-ApiItemByPath -apiConnection $Connection -Path $PrefixesAPIPath/$PrefixId/available-prefixes/
}
#EndRegion '.\Public\endpoints\ipam\prefixes\Get-NBPrefixAvailablePrefixes.ps1' 25
#Region '.\Public\endpoints\ipam\prefixes\Get-NBPrefixByCIDR.ps1' -1

function Get-NBPrefixByCIDR {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$CIDR
    )
    #(Get-ApiItemByQuery -apiConnection $Connection -RelativePath $deviceTypesPath -field 'model__ie' -value $model).results
    (Get-ApiItemByQuery -apiConnection $Connection -RelativePath $PrefixesAPIPath -field 'prefix' -value $CIDR).results

}
#EndRegion '.\Public\endpoints\ipam\prefixes\Get-NBPrefixByCIDR.ps1' 11
#Region '.\Public\endpoints\ipam\prefixes\Get-NBPrefixByID.ps1' -1

function Get-NBPrefixByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $PrefixesAPIPath -id $id

}
#EndRegion '.\Public\endpoints\ipam\prefixes\Get-NBPrefixByID.ps1' 10
#Region '.\Public\endpoints\ipam\prefixes\Get-NBPrefixes.ps1' -1

function Get-NBPrefixes {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $PrefixesAPIPath

}
#EndRegion '.\Public\endpoints\ipam\prefixes\Get-NBPrefixes.ps1' 9
#Region '.\Public\endpoints\ipam\prefixes\New-NBPrefix.ps1' -1

function New-NBPrefix {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$prefix,
        [Parameter(Mandatory=$false)][int]$site,
        [Parameter(Mandatory=$false)][int]$vrf,
        [Parameter(Mandatory=$false)][int]$tenant,
        [Parameter(Mandatory=$false)][int]$vlan,
        [Parameter(Mandatory=$false)]
            [ValidateSet('container','active','reserved','deprecated')]
            [int]$status,
        [Parameter(Mandatory=$false)][int]$role,
        [Parameter(Mandatory=$false)][bool]$is_pool,
        [Parameter(Mandatory=$false)][bool]$mark_utilized,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    if($PSBoundParameters['mark_utilized']) {$PSBoundParameters['mark_utilized']=[System.Boolean]$true}
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$PrefixesAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\ipam\prefixes\New-NBPrefix.ps1' 36
#Region '.\Public\endpoints\ipam\prefixes\Remove-NBPrefix.ps1' -1

function Remove-NBPrefix {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$PrefixesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\prefixes\Remove-NBPrefix.ps1' 15
#Region '.\Public\endpoints\ipam\prefixes\Set-NBPrefix.ps1' -1

function Set-NBPrefix {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('prefix','site','vrf','tenant','vlan','status','role','is_pool','mark_utilized',
            'description','comments','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$PrefixesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\prefixes\Set-NBPrefix.ps1' 21
#Region '.\Public\endpoints\ipam\rirs\Find-NBRIRsContainingName.ps1' -1

function Find-NBRIRsContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $RIRsAPIPath -name $name

}
#EndRegion '.\Public\endpoints\ipam\rirs\Find-NBRIRsContainingName.ps1' 10
#Region '.\Public\endpoints\ipam\rirs\Get-NBRIRByID.ps1' -1

function Get-NBRIRByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $RIRsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\ipam\rirs\Get-NBRIRByID.ps1' 10
#Region '.\Public\endpoints\ipam\rirs\Get-NBRIRByName.ps1' -1

function Get-NBRIRByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $RIRsAPIPath -value $name

}
#EndRegion '.\Public\endpoints\ipam\rirs\Get-NBRIRByName.ps1' 10
#Region '.\Public\endpoints\ipam\rirs\Get-NBRIRs.ps1' -1

function Get-NBRIRs {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $RIRsAPIPath

}
#EndRegion '.\Public\endpoints\ipam\rirs\Get-NBRIRs.ps1' 9
#Region '.\Public\endpoints\ipam\rirs\New-NBRIR.ps1' -1

function New-NBRIR {
    <#
    .SYNOPSIS
    Creates a new RIR
    .PARAMETER name
    RIR Name
    .PARAMETER Connection
    Connection object to use
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][bool]$is_private,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$RIRsAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\ipam\rirs\New-NBRIR.ps1' 34
#Region '.\Public\endpoints\ipam\rirs\Remove-NBRIR.ps1' -1

function Remove-NBRIR {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$RIRsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\rirs\Remove-NBRIR.ps1' 15
#Region '.\Public\endpoints\ipam\rirs\Set-NBRIR.ps1' -1

function Set-NBRIR {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','slug','is_private','description','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$RIRsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\rirs\Set-NBRIR.ps1' 20
#Region '.\Public\endpoints\ipam\roles\Find-NBIPAMRolesContainingName.ps1' -1

function Find-NBIPAMRolesContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $IPAMRolesAPIPath -name $name

}
#EndRegion '.\Public\endpoints\ipam\roles\Find-NBIPAMRolesContainingName.ps1' 10
#Region '.\Public\endpoints\ipam\roles\Get-NBIPAMRoleByID.ps1' -1

function Get-NBIPAMRoleByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $IPAMRolesAPIPath -id $id

}
#EndRegion '.\Public\endpoints\ipam\roles\Get-NBIPAMRoleByID.ps1' 10
#Region '.\Public\endpoints\ipam\roles\Get-NBIPAMRoleByName.ps1' -1

function Get-NBIPAMRoleByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $IPAMRolesAPIPath -value $name

}
#EndRegion '.\Public\endpoints\ipam\roles\Get-NBIPAMRoleByName.ps1' 10
#Region '.\Public\endpoints\ipam\roles\Get-NBIPAMRoles.ps1' -1

function Get-NBIPAMRoles {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $IPAMRolesAPIPath

}
#EndRegion '.\Public\endpoints\ipam\roles\Get-NBIPAMRoles.ps1' 9
#Region '.\Public\endpoints\ipam\roles\New-NBIPAMRole.ps1' -1

function New-NBIPAMRole {
    <#
    .SYNOPSIS
    Creates a new IPAM role
    .PARAMETER name
    Name of role
    .PARAMETER Connection
    Connection object to use
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][int]$weight,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$IPAMRolesAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\ipam\roles\New-NBIPAMRole.ps1' 34
#Region '.\Public\endpoints\ipam\roles\Remove-NBIPAMRole.ps1' -1

function Remove-NBIPAMRole {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$IPAMRolesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\roles\Remove-NBIPAMRole.ps1' 15
#Region '.\Public\endpoints\ipam\roles\Set-NBIPAMRole.ps1' -1

function Set-NBIPAMRole {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','slug','weight','description','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$IPAMRolesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\roles\Set-NBIPAMRole.ps1' 20
#Region '.\Public\endpoints\ipam\service-templates\Get-NBServiceTemplateByID.ps1' -1

function Get-NBServiceTemplateByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBServiceTemplatesAPIPath -id $id

}
#EndRegion '.\Public\endpoints\ipam\service-templates\Get-NBServiceTemplateByID.ps1' 10
#Region '.\Public\endpoints\ipam\service-templates\Get-NBServiceTemplates.ps1' -1

function Get-NBServiceTemplates {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBServiceTemplatesAPIPath
}
#EndRegion '.\Public\endpoints\ipam\service-templates\Get-NBServiceTemplates.ps1' 8
#Region '.\Public\endpoints\ipam\service-templates\New-NBServiceTemplate.ps1' -1

function New-NBServiceTemplate {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('tcp','udp','sctp')]
            $protocol,
        [Parameter(Mandatory=$true,Position=2)][string[]]$ports,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBServiceTemplatesAPIPath/"
        body = $PostJson
    }
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\ipam\service-templates\New-NBServiceTemplate.ps1' 28
#Region '.\Public\endpoints\ipam\service-templates\Remove-NBServiceTemplate.ps1' -1

function Remove-NBServiceTemplate {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBServiceTemplatesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\service-templates\Remove-NBServiceTemplate.ps1' 15
#Region '.\Public\endpoints\ipam\service-templates\Set-NBServiceTemplate.ps1' -1

function Set-NBServiceTemplate {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','protocol','ports','description','comments','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2,
            HelpMessage="A valid value for the attribute you want to change. If the expected value is an array, like for tags, pass it as '1,2' or whatever the ids of the tags you wish to set are."
        )][string]$value
    )
    $update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBServiceTemplatesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\service-templates\Set-NBServiceTemplate.ps1' 22
#Region '.\Public\endpoints\ipam\services\Get-NBServiceByID.ps1' -1

function Get-NBServiceByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBServiceAPIPath -id $id

}
#EndRegion '.\Public\endpoints\ipam\services\Get-NBServiceByID.ps1' 10
#Region '.\Public\endpoints\ipam\services\Get-NBServices.ps1' -1

function Get-NBServices {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBServiceAPIPath
}
#EndRegion '.\Public\endpoints\ipam\services\Get-NBServices.ps1' 8
#Region '.\Public\endpoints\ipam\services\New-NBService.ps1' -1

function New-NBService {
    <#
    .SYNOPSIS
    Adds a new service object to Netbox
    .PARAMETER device
    The id of the device object, if any
    .PARAMETER virtual_machine
    The id of the vm object, if any
    .PARAMETER name
    The name of the object
    .PARAMETER ports
    A list of ports the service listens to
    .PARAMETER protocol
    The protocol the service uses
    .PARAMETER ipaddresses
    The specific IP address IDs the service is bound to
    .PARAMETER description
    A description of the object.
    .PARAMETER comments
    Any comments you would like to add
    .PARAMETER Connection
    Connection object to use
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][int]$device,
        [Parameter(Mandatory=$false)][int]$virtual_machine,
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$true,Position=1)][string[]]$ports,
        [Parameter(Mandatory=$true,Position=2)][string]
            [ValidateSet('tcp','udp','sctp')]
            $protocol,
        [Parameter(Mandatory=$false)][int[]]$ipaddresses,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBServiceAPIPath/"
        body = $PostJson
    }
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject
}
#EndRegion '.\Public\endpoints\ipam\services\New-NBService.ps1' 52
#Region '.\Public\endpoints\ipam\services\Remove-NBService.ps1' -1

function Remove-NBService {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBServiceAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\services\Remove-NBService.ps1' 15
#Region '.\Public\endpoints\ipam\services\Set-NBService.ps1' -1

function Set-NBService {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('device','virtual_machine','name','protocol','ports','ipaddresses','description','comments','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2,
            HelpMessage="A valid value for the attribute you want to change. If the expected value is an array, like for tags, pass it as '1,2' or whatever the ids of the tags you wish to set are."
        )][string]$value
    )
    $update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBServiceAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\services\Set-NBService.ps1' 22
#Region '.\Public\endpoints\ipam\vlan-groups\Find-NBVlanGroupsContainingName.ps1' -1

function Find-NBVlanGroupsContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    (Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $vlangroupsAPIPath -name $name).results

}
#EndRegion '.\Public\endpoints\ipam\vlan-groups\Find-NBVlanGroupsContainingName.ps1' 10
#Region '.\Public\endpoints\ipam\vlan-groups\Get-NBVlanGroupAvailableVLANs.ps1' -1

function Get-NBPrefixAvailablePrefixes {
    <#
        .SYNOPSIS
            A convenience method for returning available prefixes within a prefix
     
        .DESCRIPTION
            Will return any available prefixes within a prefix.
     
        .PARAMETER PrefixId
            Parent Netbox IP Prefix ID
     
        .EXAMPLE
            Get-NBPrefixAvailablePrefixes -PrefixId (Get-NBPrefixByCIDR -CIDR '10.0.0.0/14').id
     
        .NOTES
            Additional information about the function.
    #>

    
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$ID
    )
    Get-ApiItemByPath -apiConnection $Connection -Path $vlangroupsAPIPath/$ID/available-vlans/
}
#EndRegion '.\Public\endpoints\ipam\vlan-groups\Get-NBVlanGroupAvailableVLANs.ps1' 25
#Region '.\Public\endpoints\ipam\vlan-groups\Get-NBVlanGroupByID.ps1' -1

function Get-NBVlanGroupByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $vlangroupsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\ipam\vlan-groups\Get-NBVlanGroupByID.ps1' 10
#Region '.\Public\endpoints\ipam\vlan-groups\Get-NBVlanGroupByName.ps1' -1

function Get-NBVlanGroupByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $vlangroupsAPIPath -value $name

}
#EndRegion '.\Public\endpoints\ipam\vlan-groups\Get-NBVlanGroupByName.ps1' 10
#Region '.\Public\endpoints\ipam\vlan-groups\Get-NBVlanGroups.ps1' -1

function Get-NBVlanGroups {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $vlangroupsAPIPath

}
#EndRegion '.\Public\endpoints\ipam\vlan-groups\Get-NBVlanGroups.ps1' 9
#Region '.\Public\endpoints\ipam\vlan-groups\New-NBVlanGroup.ps1' -1

function New-NBVlanGroup {
    <#
    .SYNOPSIS
    Add a new vlan group
    .PARAMETER name
    vlan group name
    .PARAMETER Connection
    Connection object
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][string]$scope_type,
        [Parameter(Mandatory=$false)][int]$scope_id,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$vlangroupsAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\ipam\vlan-groups\New-NBVlanGroup.ps1' 35
#Region '.\Public\endpoints\ipam\vlan-groups\Remove-NBVlanGroup.ps1' -1

function Remove-NBVlanGroup {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$vlangroupsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\vlan-groups\Remove-NBVlanGroup.ps1' 15
#Region '.\Public\endpoints\ipam\vlan-groups\Set-NBVlanGroup.ps1' -1

function Set-NBVlanGroup {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','slug','scope_type','scope_id','description','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$vlangroupsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\vlan-groups\Set-NBVlanGroup.ps1' 20
#Region '.\Public\endpoints\ipam\vlans\Find-NBVLANsContainingName.ps1' -1

function Find-NBVLANsContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $VLANsAPIPath -name $name

}
#EndRegion '.\Public\endpoints\ipam\vlans\Find-NBVLANsContainingName.ps1' 10
#Region '.\Public\endpoints\ipam\vlans\Get-NBVLANByID.ps1' -1

function Get-NBVLANByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $VLANsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\ipam\vlans\Get-NBVLANByID.ps1' 10
#Region '.\Public\endpoints\ipam\vlans\Get-NBVLANByName.ps1' -1

function Get-NBVLANByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $VLANsAPIPath -value $name

}
#EndRegion '.\Public\endpoints\ipam\vlans\Get-NBVLANByName.ps1' 10
#Region '.\Public\endpoints\ipam\vlans\Get-NBVLANByVID.ps1' -1

function Get-NBVLANByVID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$vid
    )
    (Get-APIItemByQuery -apiConnection $Connection -RelativePath $VLANsAPIPath -field vid -value $vid).results

}
#EndRegion '.\Public\endpoints\ipam\vlans\Get-NBVLANByVID.ps1' 10
#Region '.\Public\endpoints\ipam\vlans\Get-NBVLANs.ps1' -1

function Get-NBVLANs {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $VLANsAPIPath

}
#EndRegion '.\Public\endpoints\ipam\vlans\Get-NBVLANs.ps1' 9
#Region '.\Public\endpoints\ipam\vlans\New-NBVLAN.ps1' -1

function New-NBVLAN {
    <#
    .SYNOPSIS
    Creates a vlan object
    .PARAMETER name
    Name of the object
    .PARAMETER vid
    vlan id number
    .PARAMETER status
    status of the vlan
    .PARAMETER site
    site id
    .PARAMETER group
    group id
    .PARAMETER tenant
    tenant id
    .PARAMETER role
    role id
    .PARAMETER description
    vlan description
    .PARAMETER comments
    comments
    .PARAMETER Connection
    connection object
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][int]$site,
        [Parameter(Mandatory=$false)][int]$group,
        [Parameter(Mandatory=$true,Position=1)][int]$vid,
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][int]$tenant,
        [Parameter(Mandatory=$false,Position=2)]
            [ValidateSet('active','reserved','deprecated')]
            [string]$status="active",
        [Parameter(Mandatory=$false)][int]$role,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    if (!($PSBoundParameters.ContainsKey('status'))) {$PSBoundParameters.add('status', $status)}
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$VLANsAPIPath/"
        body = $PostJson
    }
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\ipam\vlans\New-NBVLAN.ps1' 57
#Region '.\Public\endpoints\ipam\vlans\Remove-NBVLAN.ps1' -1

function Remove-NBVLAN {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$VLANsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\vlans\Remove-NBVLAN.ps1' 15
#Region '.\Public\endpoints\ipam\vlans\Set-NBVLAN.ps1' -1

function Set-NBVLAN {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('site','group','vid','name','tenant','status',
            'role','description','comments','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$VLANsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\vlans\Set-NBVLAN.ps1' 21
#Region '.\Public\endpoints\ipam\vrfs\Find-NBVRFsContainingName.ps1' -1

function Find-NBVRFsContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $VRFsApiPath -name $name

}
#EndRegion '.\Public\endpoints\ipam\vrfs\Find-NBVRFsContainingName.ps1' 10
#Region '.\Public\endpoints\ipam\vrfs\Get-NBVRFByID.ps1' -1

function Get-NBVRFByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $VRFsApiPath -id $id

}
#EndRegion '.\Public\endpoints\ipam\vrfs\Get-NBVRFByID.ps1' 10
#Region '.\Public\endpoints\ipam\vrfs\Get-NBVRFByName.ps1' -1

function Get-NBVRFByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $VRFsApiPath -value $name

}
#EndRegion '.\Public\endpoints\ipam\vrfs\Get-NBVRFByName.ps1' 10
#Region '.\Public\endpoints\ipam\vrfs\Get-NBVRFs.ps1' -1

function Get-NBVRFs {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $VRFsApiPath

}
#EndRegion '.\Public\endpoints\ipam\vrfs\Get-NBVRFs.ps1' 9
#Region '.\Public\endpoints\ipam\vrfs\New-NBVRF.ps1' -1

function New-NBVRF {
    <#
    .SYNOPSIS
    Creates a VRF object
    .PARAMETER name
    Name of the object
    .PARAMETER rd
    Route distinguisher
    .PARAMETER tenant
    Tenant id
    .PARAMETER enforce_unique
    Enforce unique IP addresses in this VRF
    .PARAMETER description
    Description
    .PARAMETER comments
    Comments
    .PARAMETER import_targets
    An array of IDs of route targets
    .PARAMETER export_targets
    An array of IDs of route targets
    .PARAMETER Connection
    Connection object
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][string]$rd,
        [Parameter(Mandatory=$false)][int]$tenant,
        [Parameter(Mandatory=$false)][bool]$enforce_unique,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][int[]]$import_targets,
        [Parameter(Mandatory=$false)][int[]]$export_targets,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$VRFsApiPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\ipam\vrfs\New-NBVRF.ps1' 52
#Region '.\Public\endpoints\ipam\vrfs\Remove-NBVRF.ps1' -1

function Remove-NBVRF {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$VRFsApiPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\ipam\vrfs\Remove-NBVRF.ps1' 15
#Region '.\Public\endpoints\ipam\vrfs\Set-NBVRF.ps1' -1

function Set-NBVRF {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','rd','tenant','enforce_unique','description','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$VRFsApiPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}

# TODO: allow import/export targets to be set in new functions or parameter sets here
#EndRegion '.\Public\endpoints\ipam\vrfs\Set-NBVRF.ps1' 22
#Region '.\Public\endpoints\schema\Get-NBSchema.ps1' -1

function Get-NBSchema {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    (Get-ApiItemByQuery -apiConnection $Connection -RelativePath 'schema' -field format -value 'json')

}
#EndRegion '.\Public\endpoints\schema\Get-NBSchema.ps1' 9
#Region '.\Public\endpoints\schema\Get-NBSchemaDefinitionForObjectType.ps1' -1

function Get-NBSchemaDefinitionForObjectType {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory,Position=0)][object]$SchemaObject,
        [Parameter(Mandatory,Position=1)][string]$ObjectType
    )
    $SchemaObject.components.schemas.$ObjectType.properties|get-member -MemberType NoteProperty|select name,@{name='definition'; expression={$_.definition -replace 'System.Management.Automation.PSCustomObject ',''}}
}
#EndRegion '.\Public\endpoints\schema\Get-NBSchemaDefinitionForObjectType.ps1' 9
#Region '.\Public\endpoints\status\Get-NBStatus.ps1' -1

function Get-NBStatus {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $restParams=@{
        Method = 'Get'
        Uri = "$($Connection.ApiBaseUrl)/$StatusAPIPath/"
    }    
    Invoke-CustomRequest -restParams $restParams -Connection $Connection

}
#EndRegion '.\Public\endpoints\status\Get-NBStatus.ps1' 13
#Region '.\Public\endpoints\tenancy\contact-groups\Find-NBContactGroupsContainingName.ps1' -1

function Find-NBContactGroupsContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $ContactGroupsAPIPath -name $name

}
#EndRegion '.\Public\endpoints\tenancy\contact-groups\Find-NBContactGroupsContainingName.ps1' 10
#Region '.\Public\endpoints\tenancy\contact-groups\Get-NBContactGroupByID.ps1' -1

function Get-NBContactGroupByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $ContactGroupsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\tenancy\contact-groups\Get-NBContactGroupByID.ps1' 10
#Region '.\Public\endpoints\tenancy\contact-groups\Get-NBContactGroupByName.ps1' -1

function Get-NBContactGroupByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $ContactGroupsAPIPath -value $name

}
#EndRegion '.\Public\endpoints\tenancy\contact-groups\Get-NBContactGroupByName.ps1' 10
#Region '.\Public\endpoints\tenancy\contact-groups\Get-NBContactGroups.ps1' -1

function Get-NBContactGroups {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $ContactGroupsAPIPath

}
#EndRegion '.\Public\endpoints\tenancy\contact-groups\Get-NBContactGroups.ps1' 9
#Region '.\Public\endpoints\tenancy\contact-groups\New-NBContactGroup.ps1' -1

function New-NBContactGroup {
    <#
    .SYNOPSIS
    Creates a contact group object
    .PARAMETER name
    The name of the object
    .PARAMETER parent
    The ID of the parent object
    .PARAMETER description
    A description of the object
    .PARAMETER Connection
    A connection object if you do not want to use the default connection
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][int]$parent,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$ContactGroupsAPIPath/"
        body = $PostJson
    }
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\tenancy\contact-groups\New-NBContactGroup.ps1' 37
#Region '.\Public\endpoints\tenancy\contact-groups\Remove-NBContactGroup.ps1' -1

function Remove-NBContactGroup {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$ContactGroupsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\tenancy\contact-groups\Remove-NBContactGroup.ps1' 15
#Region '.\Public\endpoints\tenancy\contact-groups\Set-NBContactGroup.ps1' -1

function Set-NBContactGroup {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','slug','group','description','comments','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$ContactGroupsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\tenancy\contact-groups\Set-NBContactGroup.ps1' 20
#Region '.\Public\endpoints\tenancy\contact-roles\Find-NBContactRolesContainingName.ps1' -1

function Find-NBContactRolesContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $ContactRolesAPIPath -name $name

}
#EndRegion '.\Public\endpoints\tenancy\contact-roles\Find-NBContactRolesContainingName.ps1' 10
#Region '.\Public\endpoints\tenancy\contact-roles\Get-NBContactRoleByID.ps1' -1

function Get-NBContactRoleByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $ContactRolesAPIPath -id $id

}
#EndRegion '.\Public\endpoints\tenancy\contact-roles\Get-NBContactRoleByID.ps1' 10
#Region '.\Public\endpoints\tenancy\contact-roles\Get-NBContactRoleByName.ps1' -1

function Get-NBContactRoleByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $ContactRolesAPIPath -value $name

}
#EndRegion '.\Public\endpoints\tenancy\contact-roles\Get-NBContactRoleByName.ps1' 10
#Region '.\Public\endpoints\tenancy\contact-roles\Get-NBContactRoles.ps1' -1

function Get-NBContactRoles {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $ContactRolesAPIPath

}
#EndRegion '.\Public\endpoints\tenancy\contact-roles\Get-NBContactRoles.ps1' 9
#Region '.\Public\endpoints\tenancy\contact-roles\New-NBContactRole.ps1' -1

function New-NBContactRole {
    <#
    .SYNOPSIS
    Adds a new contact role to Netbox
    .PARAMETER name
    This parameter will be used both directly and to create an appropriate slug.
    .PARAMETER description
    Any description you'd like to add
    .PARAMETER Connection
    Connection object to use
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$ContactRolesAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\tenancy\contact-roles\New-NBContactRole.ps1' 35
#Region '.\Public\endpoints\tenancy\contact-roles\Remove-NBContactRole.ps1' -1

function Remove-NBContactRole {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$ContactRolesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\tenancy\contact-roles\Remove-NBContactRole.ps1' 15
#Region '.\Public\endpoints\tenancy\contact-roles\Set-NBContactRole.ps1' -1

function Set-NBContactRole {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','slug','description','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$ContactRolesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\tenancy\contact-roles\Set-NBContactRole.ps1' 20
#Region '.\Public\endpoints\tenancy\contacts\Find-NBContactsContainingName.ps1' -1

function Find-NBContactsContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $ContactsAPIPath -name $name

}
#EndRegion '.\Public\endpoints\tenancy\contacts\Find-NBContactsContainingName.ps1' 10
#Region '.\Public\endpoints\tenancy\contacts\Get-NBContactByID.ps1' -1

function Get-NBContactByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $ContactsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\tenancy\contacts\Get-NBContactByID.ps1' 10
#Region '.\Public\endpoints\tenancy\contacts\Get-NBContactByName.ps1' -1

function Get-NBContactByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $ContactsAPIPath -value $name

}
#EndRegion '.\Public\endpoints\tenancy\contacts\Get-NBContactByName.ps1' 10
#Region '.\Public\endpoints\tenancy\contacts\Get-NBContacts.ps1' -1

function Get-NBContacts {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $ContactsAPIPath

}
#EndRegion '.\Public\endpoints\tenancy\contacts\Get-NBContacts.ps1' 9
#Region '.\Public\endpoints\tenancy\contacts\New-NBContact.ps1' -1

function New-NBContact {
    <#
    .SYNOPSIS
    Add new contact
    .PARAMETER name
    This parameter will be used both directly and to create an appropriate slug.
    .PARAMETER group
    Group ID
    .PARAMETER title
    Title
    .PARAMETER phone
    Phone
    .PARAMETER email
    Email
    .PARAMETER address
    Address
    .PARAMETER link
    Link
    .PARAMETER description
    A description of the object.
    .PARAMETER comments
    Any comments you'd like to add
    .PARAMETER Connection
    Connection object to use
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][int]$group,
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][string]$title,
        [Parameter(Mandatory=$false)][string]$phone,
        [Parameter(Mandatory=$false)][string]$email,
        [Parameter(Mandatory=$false)][string]$address,
        [Parameter(Mandatory=$false)][string]$link,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$ContactsAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\tenancy\contacts\New-NBContact.ps1' 55
#Region '.\Public\endpoints\tenancy\contacts\Remove-NBContact.ps1' -1

function Remove-NBContact {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$ContactsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\tenancy\contacts\Remove-NBContact.ps1' 15
#Region '.\Public\endpoints\tenancy\contacts\Set-NBContact.ps1' -1

function Set-NBContact {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('group','name','title','phone','email','address',
            'link','description','comments','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$ContactsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\tenancy\contacts\Set-NBContact.ps1' 21
#Region '.\Public\endpoints\tenancy\tenant-groups\Find-NBTenantGroupsContainingName.ps1' -1

function Find-NBTenantGroupsContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $TenantGroupsAPIPath -name $name

}
#EndRegion '.\Public\endpoints\tenancy\tenant-groups\Find-NBTenantGroupsContainingName.ps1' 10
#Region '.\Public\endpoints\tenancy\tenant-groups\Get-NBTenantGroupByID.ps1' -1

function Get-NBTenantGroupByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $TenantGroupsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\tenancy\tenant-groups\Get-NBTenantGroupByID.ps1' 10
#Region '.\Public\endpoints\tenancy\tenant-groups\Get-NBTenantGroupByName.ps1' -1

function Get-NBTenantGroupByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $TenantGroupsAPIPath -value $name

}
#EndRegion '.\Public\endpoints\tenancy\tenant-groups\Get-NBTenantGroupByName.ps1' 10
#Region '.\Public\endpoints\tenancy\tenant-groups\Get-NBTenantGroups.ps1' -1

function Get-NBTenantGroups {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $TenantGroupsAPIPath

}
#EndRegion '.\Public\endpoints\tenancy\tenant-groups\Get-NBTenantGroups.ps1' 9
#Region '.\Public\endpoints\tenancy\tenant-groups\New-NBTenantGroup.ps1' -1

function New-NBTenantGroup {
    <#
    .SYNOPSIS
    Adds a new tenant group to Netbox
    .PARAMETER name
    This parameter will be used both directly and to create an appropriate slug.
    .PARAMETER parent
    Parent object group ID
    .PARAMETER description
    Any description you'd like to add
    .PARAMETER Connection
    Connection object to use
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][int]$parent,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$TenantGroupsAPIPath/"
        body = $PostJson
    }
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\tenancy\tenant-groups\New-NBTenantGroup.ps1' 37
#Region '.\Public\endpoints\tenancy\tenant-groups\Remove-NBTenantGroup.ps1' -1

function Remove-NBTenantGroup {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$TenantGroupsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\tenancy\tenant-groups\Remove-NBTenantGroup.ps1' 15
#Region '.\Public\endpoints\tenancy\tenant-groups\Set-NBTenantGroups.ps1' -1

function Set-NBTenantGroups {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','slug','parent','description','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$TenantGroupsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\tenancy\tenant-groups\Set-NBTenantGroups.ps1' 20
#Region '.\Public\endpoints\tenancy\tenants\Find-NBTenantsContainingName.ps1' -1

function Find-NBTenantsContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $TenantsAPIPath -name $name

}
#EndRegion '.\Public\endpoints\tenancy\tenants\Find-NBTenantsContainingName.ps1' 10
#Region '.\Public\endpoints\tenancy\tenants\Get-NBTenantByID.ps1' -1

function Get-NBTenantByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $TenantsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\tenancy\tenants\Get-NBTenantByID.ps1' 10
#Region '.\Public\endpoints\tenancy\tenants\Get-NBTenantByName.ps1' -1

function Get-NBTenantByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $TenantsAPIPath -value $name

}
#EndRegion '.\Public\endpoints\tenancy\tenants\Get-NBTenantByName.ps1' 10
#Region '.\Public\endpoints\tenancy\tenants\Get-NBTenants.ps1' -1

function Get-NBTenants {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $TenantsAPIPath

}
#EndRegion '.\Public\endpoints\tenancy\tenants\Get-NBTenants.ps1' 9
#Region '.\Public\endpoints\tenancy\tenants\New-NBTenant.ps1' -1

function New-NBTenant {
    <#
    .SYNOPSIS
    Adds a new tenant to Netbox
    .PARAMETER name
    This parameter will be used both directly and to create an appropriate slug.
    .PARAMETER group
    Group object ID
    .PARAMETER description
    Any description you'd like to add
    .PARAMETER comments
    Any comments you'd like to add
    .PARAMETER Connection
    Connection object to use
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][int]$group,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$TenantsAPIPath/"
        body = $PostJson
    }
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\tenancy\tenants\New-NBTenant.ps1' 40
#Region '.\Public\endpoints\tenancy\tenants\Remove-NBTenant.ps1' -1

function Remove-NBTenant {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$TenantsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\tenancy\tenants\Remove-NBTenant.ps1' 15
#Region '.\Public\endpoints\tenancy\tenants\Set-NBTenant.ps1' -1

function Set-NBTenant {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','slug','group','description','comments','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$TenantsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\tenancy\tenants\Set-NBTenant.ps1' 20
#Region '.\Public\endpoints\users\Get-NBUserByID.ps1' -1

function Get-NBUserByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $UsersAPIPath -id $id

}
#EndRegion '.\Public\endpoints\users\Get-NBUserByID.ps1' 10
#Region '.\Public\endpoints\users\Get-NBUserByName.ps1' -1

function Get-NBUserByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $UsersAPIPath -value $name

}
#EndRegion '.\Public\endpoints\users\Get-NBUserByName.ps1' 10
#Region '.\Public\endpoints\users\Get-NBUsers.ps1' -1

function Get-NBUsers {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $UsersAPIPath

}
#EndRegion '.\Public\endpoints\users\Get-NBUsers.ps1' 9
#Region '.\Public\endpoints\virtualization\cluster-groups\Find-NBVMClusterGroupsContainingName.ps1' -1

function Find-NBVMClusterGroupsContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $VirtualizationClusterGroupsAPIPath -name $name

}
#EndRegion '.\Public\endpoints\virtualization\cluster-groups\Find-NBVMClusterGroupsContainingName.ps1' 10
#Region '.\Public\endpoints\virtualization\cluster-groups\Get-NBVMClusterGroupByID.ps1' -1

function Get-NBVMClusterGroupByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $VirtualizationClusterGroupsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\virtualization\cluster-groups\Get-NBVMClusterGroupByID.ps1' 10
#Region '.\Public\endpoints\virtualization\cluster-groups\Get-NBVMClusterGroupByName.ps1' -1

function Get-NBVMClusterGroupByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $VirtualizationClusterGroupsAPIPath -value $name

}
#EndRegion '.\Public\endpoints\virtualization\cluster-groups\Get-NBVMClusterGroupByName.ps1' 10
#Region '.\Public\endpoints\virtualization\cluster-groups\Get-NBVMClusterGroups.ps1' -1

function Get-NBVMClusterGroups {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $VirtualizationClusterGroupsAPIPath

}
#EndRegion '.\Public\endpoints\virtualization\cluster-groups\Get-NBVMClusterGroups.ps1' 9
#Region '.\Public\endpoints\virtualization\cluster-groups\New-NBVMClusterGroup.ps1' -1

function New-NBVMClusterGroup {
    <#
    .SYNOPSIS
    Add a new VM Cluster Group
    .PARAMETER name
    This parameter will be used both directly and to create an appropriate slug.
    .PARAMETER description
    Any description you'd like to add
    .PARAMETER Connection
    Connection object to use
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$VirtualizationClusterGroupsAPIPath/"
        body = $PostJson
    }
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\virtualization\cluster-groups\New-NBVMClusterGroup.ps1' 34
#Region '.\Public\endpoints\virtualization\cluster-groups\Remove-NBVMClusterGroup.ps1' -1

function Remove-NBVMClusterGroup {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$VirtualizationClusterGroupsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\virtualization\cluster-groups\Remove-NBVMClusterGroup.ps1' 15
#Region '.\Public\endpoints\virtualization\cluster-groups\Set-NBVMClusterGroup.ps1' -1

function Set-NBVMClusterGroup {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','slug','description','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$VirtualizationClusterGroupsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\virtualization\cluster-groups\Set-NBVMClusterGroup.ps1' 20
#Region '.\Public\endpoints\virtualization\cluster-types\Find-NBVMClusterTypesContainingName.ps1' -1

function Find-NBVMClusterTypesContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $VirtualizationClusterTypesAPIPath -name $name

}
#EndRegion '.\Public\endpoints\virtualization\cluster-types\Find-NBVMClusterTypesContainingName.ps1' 10
#Region '.\Public\endpoints\virtualization\cluster-types\Get-NBVMClusterTypeByID.ps1' -1

function Get-NBVMClusterTypeByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $VirtualizationClusterTypesAPIPath -id $id

}
#EndRegion '.\Public\endpoints\virtualization\cluster-types\Get-NBVMClusterTypeByID.ps1' 10
#Region '.\Public\endpoints\virtualization\cluster-types\Get-NBVMClusterTypeByName.ps1' -1

function Get-NBVMClusterTypeByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $VirtualizationClusterTypesAPIPath -value $name

}
#EndRegion '.\Public\endpoints\virtualization\cluster-types\Get-NBVMClusterTypeByName.ps1' 10
#Region '.\Public\endpoints\virtualization\cluster-types\Get-NBVMClusterTypes.ps1' -1

function Get-NBVMClusterTypes {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $VirtualizationClusterTypesAPIPath

}
#EndRegion '.\Public\endpoints\virtualization\cluster-types\Get-NBVMClusterTypes.ps1' 9
#Region '.\Public\endpoints\virtualization\cluster-types\New-NBVMClusterType.ps1' -1

function New-NBVMClusterType {
    <#
    .SYNOPSIS
    Add a new VM Cluster type
    .PARAMETER name
    This parameter will be used both directly and to create an appropriate slug.
    .PARAMETER description
    Any description you'd like to add
    .PARAMETER Connection
    Connection object to use
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$VirtualizationClusterTypesAPIPath/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\virtualization\cluster-types\New-NBVMClusterType.ps1' 35
#Region '.\Public\endpoints\virtualization\cluster-types\Remove-NBVMClusterType.ps1' -1

function Remove-NBVMClusterType {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$VirtualizationClusterTypesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\virtualization\cluster-types\Remove-NBVMClusterType.ps1' 15
#Region '.\Public\endpoints\virtualization\cluster-types\Set-NBVMClusterType.ps1' -1

function Set-NBVMClusterType {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','slug','description','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$VirtualizationClusterTypesAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\virtualization\cluster-types\Set-NBVMClusterType.ps1' 20
#Region '.\Public\endpoints\virtualization\clusters\Find-NBVMClustersContainingName.ps1' -1

function Find-NBVMClustersContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $VirtualizationClustersAPIPath -name $name

}
#EndRegion '.\Public\endpoints\virtualization\clusters\Find-NBVMClustersContainingName.ps1' 10
#Region '.\Public\endpoints\virtualization\clusters\Get-NBVMClusterByID.ps1' -1

function Get-NBVMClusterByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $VirtualizationClustersAPIPath -id $id

}
#EndRegion '.\Public\endpoints\virtualization\clusters\Get-NBVMClusterByID.ps1' 10
#Region '.\Public\endpoints\virtualization\clusters\Get-NBVMClusterByName.ps1' -1

function Get-NBVMClusterByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Get-APIItemByName -apiConnection $Connection -RelativePath $VirtualizationClustersAPIPath -value $name

}
#EndRegion '.\Public\endpoints\virtualization\clusters\Get-NBVMClusterByName.ps1' 10
#Region '.\Public\endpoints\virtualization\clusters\Get-NBVMClusters.ps1' -1

function Get-NBVMClusters {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $VirtualizationClustersAPIPath

}
#EndRegion '.\Public\endpoints\virtualization\clusters\Get-NBVMClusters.ps1' 9
#Region '.\Public\endpoints\virtualization\clusters\New-NBVMCluster.ps1' -1

function New-NBVMCluster {
    <#
    .SYNOPSIS
    Creates a new virtual machine cluster object
    .PARAMETER name
    Name of the object
    .PARAMETER type
    ID of the type object
    .PARAMETER group
    ID of the group object
    .PARAMETER status
    Any of the allowed lifecycle status options for this object
    .PARAMETER tenant
    ID of the tenant object
    .PARAMETER site
    ID of the site object
    .PARAMETER description
    A description of the object
    .PARAMETER comments
    Any comments you would like to add
    .PARAMETER Connection
    Connection object to use
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$true,Position=1)][int]$type,
        [Parameter(Mandatory=$false)][int]$group,
        [Parameter(Mandatory=$false)][string]
            [ValidateSet('planned','staging','active','decommissioning','offline')]
            $status="active",
        [Parameter(Mandatory=$false)][int]$tenant,
        [Parameter(Mandatory=$false)][int]$site,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    if (!($PSBoundParameters.ContainsKey('status'))) {$PSBoundParameters.add('status', $status)}
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$VirtualizationClustersAPIPath/"
        body = $PostJson
    }
    $PostObject= Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\virtualization\clusters\New-NBVMCluster.ps1' 54
#Region '.\Public\endpoints\virtualization\clusters\Remove-NBVMCluster.ps1' -1

function Remove-NBVMCluster {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$VirtualizationClustersAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\virtualization\clusters\Remove-NBVMCluster.ps1' 15
#Region '.\Public\endpoints\virtualization\clusters\Set-NBVMCluster.ps1' -1

function Set-NBVMCluster {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','type','group','tenant','site','comments','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$VirtualizationClustersAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\virtualization\clusters\Set-NBVMCluster.ps1' 20
#Region '.\Public\endpoints\virtualization\interfaces\Find-NBVMInterfacesContainingName.ps1' -1

function Find-NBVMInterfacesContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $VirtualizationInterfaceAPIPath -name $name

}
#EndRegion '.\Public\endpoints\virtualization\interfaces\Find-NBVMInterfacesContainingName.ps1' 10
#Region '.\Public\endpoints\virtualization\interfaces\Get-NBVMInterfaceByID.ps1' -1

function Get-NBVMInterfaceByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $VirtualizationInterfaceAPIPath -id $id

}
#EndRegion '.\Public\endpoints\virtualization\interfaces\Get-NBVMInterfaceByID.ps1' 10
#Region '.\Public\endpoints\virtualization\interfaces\Get-NBVMInterfaceByName.ps1' -1

function Get-NBVMInterfaceByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $VirtualizationInterfaceAPIPath -value $name

}
#EndRegion '.\Public\endpoints\virtualization\interfaces\Get-NBVMInterfaceByName.ps1' 10
#Region '.\Public\endpoints\virtualization\interfaces\Get-NBVMInterfaceForVM.ps1' -1

function Get-NBVMInterfaceForVM {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    (Get-APIItemByQuery -apiConnection $Connection -RelativePath $VirtualizationInterfaceAPIPath -field 'virtual_machine_id' $id).results

}
#EndRegion '.\Public\endpoints\virtualization\interfaces\Get-NBVMInterfaceForVM.ps1' 10
#Region '.\Public\endpoints\virtualization\interfaces\Get-NBVMInterfaces.ps1' -1

function Get-NBVMInterfaces {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $VirtualizationInterfaceAPIPath

}
#EndRegion '.\Public\endpoints\virtualization\interfaces\Get-NBVMInterfaces.ps1' 9
#Region '.\Public\endpoints\virtualization\interfaces\New-NBVMInterface.ps1' -1

function New-NBVMInterface {
    <#
    .SYNOPSIS
    Adds a new interface object to a VM
    .PARAMETER virtual_machine
    Virtual Machine object ID
    .PARAMETER name
    Name
    .PARAMETER enabled
    Is this interface enabled?
    .PARAMETER parent
    Parent interface ID
    .PARAMETER bridge
    Bridge object ID of this interface.
    .PARAMETER mtu
     MTU of this interface
    .PARAMETER mac_address
    MAC address of this interface
    .PARAMETER description
    Any description you'd like to add
    .PARAMETER mode
    Tagging mode of this interface.
    .PARAMETER untagged_vlan
    VLAN object ID
    .PARAMETER vrf
    VRF object ID
    .PARAMETER Connection
    Connection object to use
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][int]$virtual_machine,
        [Parameter(Mandatory=$true,Position=1)][string]$name,
        [Parameter(Mandatory=$false)][bool]$enabled,
        [Parameter(Mandatory=$false)][int]$parent,
        [Parameter(Mandatory=$false)][int]$bridge,
        [Parameter(Mandatory=$false)][int]$mtu,
        [Parameter(Mandatory=$false)][string]$mac_address,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]
        [ValidateSet('access','tagged','tagged-all')]
        $mode,
        [Parameter(Mandatory=$false)][int]$untagged_vlan,
        [Parameter(Mandatory=$false)][int[]]$tagged_vlans,
        [Parameter(Mandatory=$false)][int]$vrf,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$VirtualizationInterfaceAPIPath/"
        body = $PostJson
    }
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\virtualization\interfaces\New-NBVMInterface.ps1' 63
#Region '.\Public\endpoints\virtualization\interfaces\Remove-NBVMInterface.ps1' -1

function Remove-NBVMInterface {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$VirtualizationInterfaceAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\virtualization\interfaces\Remove-NBVMInterface.ps1' 15
#Region '.\Public\endpoints\virtualization\interfaces\Set-NBVMInterface.ps1' -1

function Set-NBVMInterface {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('virtual_machine','name','enabled','parent','bridge','mtu','mac_address','description',
            'mode','untagged_vlan','tagged_vlans','vrf','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$VirtualizationInterfaceAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\virtualization\interfaces\Set-NBVMInterface.ps1' 21
#Region '.\Public\endpoints\virtualization\interfaces\Set-NBVMInterfaceTaggedVLANs.ps1' -1

function Set-NBVMInterfaceTaggedVLANs {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][int[]]$tagged_vlans

    )
    $update=@{
        tagged_vlans = $tagged_vlans
    }
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$VirtualizationInterfaceAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)
}
#EndRegion '.\Public\endpoints\virtualization\interfaces\Set-NBVMInterfaceTaggedVLANs.ps1' 19
#Region '.\Public\endpoints\virtualization\virtual-disks\Get-NBVMVirtualDiskByID.ps1' -1

function Get-NBVMVirtualDiskByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBVirtualDisksAPIPath -id $id

}
#EndRegion '.\Public\endpoints\virtualization\virtual-disks\Get-NBVMVirtualDiskByID.ps1' 10
#Region '.\Public\endpoints\virtualization\virtual-disks\Get-NBVMVirtualDiskByName.ps1' -1

function Get-NBVMVirtualDiskByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Get-APIItemByName -apiConnection $Connection -RelativePath $NBVirtualDisksAPIPath -value $name

}
#EndRegion '.\Public\endpoints\virtualization\virtual-disks\Get-NBVMVirtualDiskByName.ps1' 10
#Region '.\Public\endpoints\virtualization\virtual-disks\Get-NBVMVirtualDiskForVM.ps1' -1

function Get-NBVMVirtualDiskForVM {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    (Get-APIItemByQuery -apiConnection $Connection -RelativePath $NBVirtualDisksAPIPath -field 'virtual_machine_id' $id).results

}
#EndRegion '.\Public\endpoints\virtualization\virtual-disks\Get-NBVMVirtualDiskForVM.ps1' 10
#Region '.\Public\endpoints\virtualization\virtual-disks\Get-NBVMVirtualDisks.ps1' -1

function Get-NBVMVirtualDisks {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBVirtualDisksAPIPath

}
#EndRegion '.\Public\endpoints\virtualization\virtual-disks\Get-NBVMVirtualDisks.ps1' 9
#Region '.\Public\endpoints\virtualization\virtual-disks\New-NBVMVirtualDisk.ps1' -1

function New-NBVMVirtualDisk {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][int]$virtual_machine,
        [Parameter(Mandatory=$true,Position=1)][string]$name,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$true,Position=2)][int]$size,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    if (!($PSBoundParameters.ContainsKey('status'))) {$PSBoundParameters.add('status', $status)}
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBVirtualDisksAPIPath/"
        body = $PostJson
    }
    $PostObject= Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\virtualization\virtual-disks\New-NBVMVirtualDisk.ps1' 26
#Region '.\Public\endpoints\virtualization\virtual-disks\Remove-NBVMVirtualDisk.ps1' -1

function Remove-NBVMVirtualDisk {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBVirtualDisksAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\virtualization\virtual-disks\Remove-NBVMVirtualDisk.ps1' 15
#Region '.\Public\endpoints\virtualization\virtual-disks\Set-NBVMVirtualDisk.ps1' -1

function Set-NBVMVirtualDisk {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('virtual_machine','name','description','size','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBVirtualDisksAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\virtualization\virtual-disks\Set-NBVMVirtualDisk.ps1' 20
#Region '.\Public\endpoints\virtualization\virtual-machines\Find-NBVMsContainingName.ps1' -1

function Find-NBVMsContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $VirtualizationVMsAPIPath -name $name

}
#EndRegion '.\Public\endpoints\virtualization\virtual-machines\Find-NBVMsContainingName.ps1' 10
#Region '.\Public\endpoints\virtualization\virtual-machines\Get-NBVMByID.ps1' -1

function Get-NBVMByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $VirtualizationVMsAPIPath -id $id

}
#EndRegion '.\Public\endpoints\virtualization\virtual-machines\Get-NBVMByID.ps1' 10
#Region '.\Public\endpoints\virtualization\virtual-machines\Get-NBVMByName.ps1' -1

function Get-NBVMByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-APIItemByName -apiConnection $Connection -RelativePath $VirtualizationVMsAPIPath -value $name

}
#EndRegion '.\Public\endpoints\virtualization\virtual-machines\Get-NBVMByName.ps1' 10
#Region '.\Public\endpoints\virtualization\virtual-machines\Get-NBVMs.ps1' -1

function Get-NBVMs {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $VirtualizationVMsAPIPath

}
#EndRegion '.\Public\endpoints\virtualization\virtual-machines\Get-NBVMs.ps1' 9
#Region '.\Public\endpoints\virtualization\virtual-machines\New-NBVM.ps1' -1

function New-NBVM {
    <#
    .SYNOPSIS
    Adds a new virtual machine object to Netbox
    .PARAMETER name
    The name of the virtual machine
    .PARAMETER cluster
    The ID of the vm cluster object
    .PARAMETER status
    The status of the new vm
    .PARAMETER site
    The ID of the site for the object
    .PARAMETER device
    The ID of a device in the cluster this object is pinned to
    .PARAMETER role
    Role object ID
    .PARAMETER tenant
    Tenant object ID
    .PARAMETER platform
    Platform object ID
    .PARAMETER primary_ip4
    IPv4 object ID
    .PARAMETER primary_ip6
    IPv6 object ID
    .PARAMETER vcpus
    Number of vCPUs assigned to this VM
    .PARAMETER memory
    Memory measured in MB
    .PARAMETER disk
    Disk space measured in GB
    .PARAMETER description
    A description of the object.
    .PARAMETER comments
    Any comments you would like to add
    .PARAMETER local_context_data
    A json string with local context data for the object.
    .PARAMETER Connection
    Connection object to use
    #>

    [CmdletBinding(DefaultParameterSetName = 'Cluster')]
    param (
        [Parameter(Mandatory=$true,Position=0,ParameterSetName='Cluster')]
        [Parameter(Mandatory=$true,Position=0,ParameterSetName='Site')]
            [string]$name,
        [Parameter(Mandatory=$false,ParameterSetName='Cluster')]
        [Parameter(Mandatory=$false,ParameterSetName='Site')]
            [ValidateSet('offline','active','planned','staged','failed', 'decommissioning')]
            [string]$status,
        [Parameter(Mandatory=$false,ParameterSetName='Cluster')]
        [Parameter(Mandatory=$true,ParameterSetName='Site')]
            [int]$site,
        [Parameter(Mandatory=$true,Position=1,ParameterSetName='Cluster')]
        [Parameter(Mandatory=$false,Position=1,ParameterSetName='Site')]
            [int]$cluster,
        [Parameter(Mandatory=$false,ParameterSetName='Cluster')]
        [Parameter(Mandatory=$false,ParameterSetName='Site')]
            [int]$device,
        [Parameter(Mandatory=$false,ParameterSetName='Cluster')]
        [Parameter(Mandatory=$false,ParameterSetName='Site')]
            [string]$serial,
        [Parameter(Mandatory=$false,ParameterSetName='Cluster')]
        [Parameter(Mandatory=$false,ParameterSetName='Site')]
            [int]$role,
        [Parameter(Mandatory=$false,ParameterSetName='Cluster')]
        [Parameter(Mandatory=$false,ParameterSetName='Site')]
            [int]$tenant,
        [Parameter(Mandatory=$false,ParameterSetName='Cluster')]
        [Parameter(Mandatory=$false,ParameterSetName='Site')]
            [int]$platform,
        # Genuinely don't understand why the form asks for this on a new vm, not like there's an IP already associated
        # that you could assign as primary
        # [Parameter(Mandatory=$false)][int]$primary_ip4,
        # [Parameter(Mandatory=$false)][int]$primary_ip6,
        [Parameter(Mandatory=$false,ParameterSetName='Cluster')]
        [Parameter(Mandatory=$false,ParameterSetName='Site')]
            [double]$vcpus,
        [Parameter(Mandatory=$false,ParameterSetName='Cluster')]
        [Parameter(Mandatory=$false,ParameterSetName='Site')]
            [int]$memory,
        [Parameter(Mandatory=$false,ParameterSetName='Cluster')]
        [Parameter(Mandatory=$false,ParameterSetName='Site')]
            [int]$disk,
        [Parameter(Mandatory=$false,ParameterSetName='Cluster')]
        [Parameter(Mandatory=$false,ParameterSetName='Site')]
            [string]$description,
        [Parameter(Mandatory=$false,ParameterSetName='Cluster')]
        [Parameter(Mandatory=$false,ParameterSetName='Site')]
            [string]$comments,
        [Parameter(Mandatory=$false,ParameterSetName='Cluster')]
        [Parameter(Mandatory=$false,ParameterSetName='Site')]
            [string]$config_template,            
        [Parameter(Mandatory=$false,ParameterSetName='Cluster')]
        [Parameter(Mandatory=$false,ParameterSetName='Site')]
            [string]$local_context_data,
        [Parameter(Mandatory=$false,ParameterSetName='Cluster')]
        [Parameter(Mandatory=$false,ParameterSetName='Site')]
            [string[]]$tags,
        [Parameter(Mandatory=$false,ParameterSetName='Cluster')]
        [Parameter(Mandatory=$false,ParameterSetName='Site')]
            [hashtable]$custom_fields,
        [Parameter(Mandatory=$false,ParameterSetName='Cluster')]
        [Parameter(Mandatory=$false,ParameterSetName='Site')]
            [object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$VirtualizationVMsAPIPath/"
        body = $PostJson
    }
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\virtualization\virtual-machines\New-NBVM.ps1' 118
#Region '.\Public\endpoints\virtualization\virtual-machines\Remove-NBVM.ps1' -1

function Remove-NBVM {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$VirtualizationVMsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\virtualization\virtual-machines\Remove-NBVM.ps1' 15
#Region '.\Public\endpoints\virtualization\virtual-machines\Set-NBVM.ps1' -1

function Set-NBVM {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','status','site','cluster','device','serial','role','tenant','platform','primary_ip4','primary_ip6',
            'vcpus','memory','disk','comments','config_template','local_context_data','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$VirtualizationVMsAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    Write-Debug ($restParams.body|Out-String)
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\virtualization\virtual-machines\Set-NBVM.ps1' 22
#Region '.\Public\endpoints\wireless\wireless-lan-groups\Find-NBWirelessLanGroupsContainingName.ps1' -1

function Find-NBWirelessLanGroupsContainingName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Find-ApiItemsContainingName -apiConnection $Connection -RelativePath $NBWirelessLanGroupAPIPath -name $name

}
#EndRegion '.\Public\endpoints\wireless\wireless-lan-groups\Find-NBWirelessLanGroupsContainingName.ps1' 10
#Region '.\Public\endpoints\wireless\wireless-lan-groups\Get-NBWirelessLanGroupByID.ps1' -1

function Get-NBWirelessLanGroupByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBWirelessLanGroupAPIPath -id $id

}
#EndRegion '.\Public\endpoints\wireless\wireless-lan-groups\Get-NBWirelessLanGroupByID.ps1' 10
#Region '.\Public\endpoints\wireless\wireless-lan-groups\Get-NBWirelessLanGroupByName.ps1' -1

function Get-NBWirelessLanGroupByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $NBWirelessLanGroupAPIPath -value $name

}
#EndRegion '.\Public\endpoints\wireless\wireless-lan-groups\Get-NBWirelessLanGroupByName.ps1' 10
#Region '.\Public\endpoints\wireless\wireless-lan-groups\Get-NBWirelessLanGroups.ps1' -1

function Get-NBWirelessLanGroups {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBWirelessLanGroupAPIPath

}
#EndRegion '.\Public\endpoints\wireless\wireless-lan-groups\Get-NBWirelessLanGroups.ps1' 9
#Region '.\Public\endpoints\wireless\wireless-lan-groups\New-NBWirelessLanGroup.ps1' -1

function New-NBWirelessLanGroup {
    <#
    .SYNOPSIS
    Adds a new wireless lan group to Netbox
    .PARAMETER name
    This parameter will be used both directly and to create an appropriate slug.
    .PARAMETER parent
    Parent object group ID
    .PARAMETER description
    Any description you'd like to add
    .PARAMETER Connection
    Connection object to use
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$name,
        [Parameter(Mandatory=$false)][int]$parent,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PSBoundParameters['slug']=makeSlug -name $name
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBWirelessLanGroupAPIPath/"
        body = $PostJson
    }
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\wireless\wireless-lan-groups\New-NBWirelessLanGroup.ps1' 37
#Region '.\Public\endpoints\wireless\wireless-lan-groups\Remove-NBWirelessLanGroup.ps1' -1

function Remove-NBWirelessLanGroup {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBWirelessLanGroupAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\wireless\wireless-lan-groups\Remove-NBWirelessLanGroup.ps1' 15
#Region '.\Public\endpoints\wireless\wireless-lan-groups\Set-NBWirelessLanGroup.ps1' -1

function Set-NBWirelessLanGroup {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('name','slug','parent','description','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBWirelessLanGroupAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\wireless\wireless-lan-groups\Set-NBWirelessLanGroup.ps1' 20
#Region '.\Public\endpoints\wireless\wireless-lans\Get-NBWirelessLanByID.ps1' -1

function Get-NBWirelessLanByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBWirelessLanAPIPath -id $id

}
#EndRegion '.\Public\endpoints\wireless\wireless-lans\Get-NBWirelessLanByID.ps1' 10
#Region '.\Public\endpoints\wireless\wireless-lans\Get-NBWirelessLanBySSID.ps1' -1

function Get-NBWirelessLanBySSID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$SSID
    )
    Get-APIItemByQuery -apiConnection $Connection -RelativePath $NBWirelessLanAPIPath -field ssid -value $SSID

}
#EndRegion '.\Public\endpoints\wireless\wireless-lans\Get-NBWirelessLanBySSID.ps1' 10
#Region '.\Public\endpoints\wireless\wireless-lans\Get-NBWirelessLans.ps1' -1

function Get-NBWirelessLans {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBWirelessLanAPIPath

}
#EndRegion '.\Public\endpoints\wireless\wireless-lans\Get-NBWirelessLans.ps1' 9
#Region '.\Public\endpoints\wireless\wireless-lans\New-NBWirelessLan.ps1' -1

function New-NBWirelessLan {
    <#
    .SYNOPSIS
    Adds a new wireless lan object to Netbox
    .PARAMETER ssid
    The SSID of the wireless LAN
    .PARAMETER description
    Any description you'd like to add
    .PARAMETER group
    Group object ID
    .PARAMETER vlan
    VLAN object ID
    .PARAMETER auth_type
    Authentication type
    .PARAMETER auth_cipher
    Authentication cipher
    .PARAMETER auth_psk
    Authentication pre-shared key
    .PARAMETER Connection
    Connection object to use
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$ssid,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][int]$group,
        [Parameter(Mandatory=$false)][string]
            [ValidateSet('active','reserved','disabled','deprecated')]
            # Authentication Type
            $status,
        [Parameter(Mandatory=$false)][int]$vlan,
        [Parameter(Mandatory=$false)][int]$tenant,
        [Parameter(Mandatory=$false)][string]
            [ValidateSet('open','wep','wpa-personal','wpa-enterprise')]
            # Authentication Type
            $auth_type,
        [Parameter(Mandatory=$false)][string]
            [ValidateSet('auto','tkip','aes')]
            # Authentication Cipher
            $auth_cipher,
        [Parameter(Mandatory=$false)][string]
            # Authentication pre-shared key, if applicable. maxlength: 64
            $auth_psk,
            [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBWirelessLanAPIPath/"
        body = $PostJson
    }
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\wireless\wireless-lans\New-NBWirelessLan.ps1' 62
#Region '.\Public\endpoints\wireless\wireless-lans\Remove-NBWirelessLan.ps1' -1

function Remove-NBWirelessLan {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBWirelessLanAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\wireless\wireless-lans\Remove-NBWirelessLan.ps1' 15
#Region '.\Public\endpoints\wireless\wireless-lans\Set-NBWirelessLan.ps1' -1

function Set-NBWirelessLan {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('ssid','description','group','status','vlan','tenant','auth_type','auth_cipher','auth_psk','comments','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBWirelessLanAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)

}
#EndRegion '.\Public\endpoints\wireless\wireless-lans\Set-NBWirelessLan.ps1' 20
#Region '.\Public\endpoints\wireless\wireless-links\Get-NBWirelessLinkByID.ps1' -1

function Get-NBWirelessLinkByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBWirelessLinkAPIPath -id $id
}
#EndRegion '.\Public\endpoints\wireless\wireless-links\Get-NBWirelessLinkByID.ps1' 9
#Region '.\Public\endpoints\wireless\wireless-links\Get-NBWirelessLinks.ps1' -1

function Get-NBWirelessLinks {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $NBWirelessLinkAPIPath
}
#EndRegion '.\Public\endpoints\wireless\wireless-links\Get-NBWirelessLinks.ps1' 8
#Region '.\Public\endpoints\wireless\wireless-links\New-NBWirelessLink.ps1' -1

function New-NBWirelessLink {
    <#
    .SYNOPSIS
    Adds a new virtual machine object to Netbox
    .PARAMETER interface_a
    The id of interface object A
    .PARAMETER interface_b
    The id of interface object B
    .PARAMETER ssid
    The SSID string of the connection
    .PARAMETER status
    The applicable lifecycle status of this object
    .PARAMETER tenant
    The id of the tenant object
    .PARAMETER auth_type
    The authentication type
    .PARAMETER auth_cipher
    The authentication cipher
    .PARAMETER auth_psk
    The pre-shared key
    .PARAMETER description
    A description of the objects
    .PARAMETER comments
    Any comments you have on the object
    .PARAMETER Connection
    Connection object to use
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][int]$interface_a,
        [Parameter(Mandatory=$true,Position=1)][int]$interface_b,
        [Parameter(Mandatory=$false)][string]$ssid,
        [Parameter(Mandatory=$false)][string]
            [ValidateSet('connected','planned','decommissioning')]
            $status,
        [Parameter(Mandatory=$false)][int]$tenant,
        [Parameter(Mandatory=$false)][string]
            [ValidateSet('open','wep','wpa-personal','wpa-enterprise')]
            $auth_type,
        [Parameter(Mandatory=$false)][string]
            [ValidateSet('auto','tkip','aes')]
            $auth_cipher,
        [Parameter(Mandatory=$false)][string]$auth_psk,
        [Parameter(Mandatory=$false)][double]$distance,
        [Parameter(Mandatory=$false)][ValidateSet('km','m','mi','ft')][string]$distance_unit,
        [Parameter(Mandatory=$false)][string]$description,
        [Parameter(Mandatory=$false)][string]$comments,
        [Parameter(Mandatory=$false)][string[]]$tags,
        [Parameter(Mandatory=$false)][hashtable]$custom_fields,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $PostJson = createPostJson -Fields ($PSBoundParameters.GetEnumerator())
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$NBWirelessLinkAPIPath/"
        body = $PostJson
    }
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\endpoints\wireless\wireless-links\New-NBWirelessLink.ps1' 65
#Region '.\Public\endpoints\wireless\wireless-links\Remove-NBWirelessLink.ps1' -1

function Remove-NBRack {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id
    )
    $restParams=@{
        Method = 'Delete'
        URI = "$($Connection.ApiBaseURL)/$NBWirelessLinkAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)
}
#EndRegion '.\Public\endpoints\wireless\wireless-links\Remove-NBWirelessLink.ps1' 14
#Region '.\Public\endpoints\wireless\wireless-links\Set-NBWirelessLink.ps1' -1

function Set-NBRack {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][int]$id,
        [Parameter(Mandatory=$true,Position=1)][string]
            [ValidateSet('interface_a','interface_b','ssid','status','tenant','auth_type',
                         'auth_cipher','auth_psk','distance','distance_unit','description',
                         'comments','tags','custom_fields')]
            $key,
        [Parameter(Mandatory=$true,Position=2)][string]$value
    )
$update=processFieldUpdates $key $value
    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$NBWirelessLinkAPIPath/$id/"
        body = $update | ConvertTo-Json -Depth 50
    }
    (Invoke-CustomRequest -restParams $restParams -Connection $Connection)
}
#EndRegion '.\Public\endpoints\wireless\wireless-links\Set-NBWirelessLink.ps1' 21
#Region '.\Public\generic\Get-NBGenericItemByID.ps1' -1

function Get-NBGenericItemByID {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$Path,
        [Parameter(Mandatory=$true,Position=1)][int]$id
    )
    Get-ApiItemByID -apiConnection $Connection -RelativePath $NBCablesAPIPath -id $id

}
#EndRegion '.\Public\generic\Get-NBGenericItemByID.ps1' 11
#Region '.\Public\generic\Get-NBGenericItemByName.ps1' -1

function Get-NBGenericItemByName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$Path,
        [Parameter(Mandatory=$true,Position=1)][string]$name
    )
    Get-ApiItemByName -apiConnection $Connection -RelativePath $Path -value $name

}
#EndRegion '.\Public\generic\Get-NBGenericItemByName.ps1' 11
#Region '.\Public\generic\Get-NBGenericItems.ps1' -1

function Get-NBGenericItems {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$Path,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    Get-ApiItems -apiConnection $Connection -RelativePath $Path
}
#EndRegion '.\Public\generic\Get-NBGenericItems.ps1' 9
#Region '.\Public\generic\Get-NBGenericItemsForParentItemByField.ps1' -1

function Get-NBGenericItemsForParentItemByField {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection,
        [Parameter(Mandatory=$true,Position=0)][string]$Path,
        [Parameter(Mandatory=$true,Position=0)][string]$Field,
        [Parameter(Mandatory=$true,Position=0)][string]$value

    )
    (Get-APIItemByQuery -apiConnection $Connection -RelativePath $Path -field $Field -value $value).results

}
#EndRegion '.\Public\generic\Get-NBGenericItemsForParentItemByField.ps1' 13
#Region '.\Public\generic\New-NBGenericObject.ps1' -1

function New-NBGenericObject {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$Path,
        [Parameter(Mandatory=$true,Position=1)][Object]$NewItem,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    #$NewItem|Get-Member|Out-Host
    $NewItem.PSObject.Properties.Remove('id')
    $NewItem.PSObject.Properties.Remove('url')
    $NewItem.PSObject.Properties.Remove('display_url')
    #$NewItem.PSObject.Properties.Remove('custom_fields')
    $NewItem.PSObject.Properties.Remove('primary_ip')
    $NewItem.PSObject.Properties.Remove('primary_ip4')
    $NewItem.PSObject.Properties.Remove('primary_ip6')
    $NewItem.PSObject.Properties.Remove('oob_ip')
    if ($NewItem.name){
        if(!($NewItem.slug)){$NewItem|Add-Member -MemberType NoteProperty -Name 'slug' -Value (makeSlug $NewItem.name)}
        else{$NewItem.slug =(makeSlug $NewItem.name)}
    }
    $NewItem.status.gettype()
    if($NewItem.status){
        [string]$stat=$NewItem.status.value.ToString()
        $NewItem.PSObject.Properties.Remove('status')
        $NewItem|Add-Member -MemberType NoteProperty -Name 'status' -Value $stat
    }
    $NewItem|Get-Member -Type NoteProperty|Select-Object -ExpandProperty Name|ForEach-Object { 
        if($deviceObj.$_.id){
            $NewItem.$_ = $NewItem.$_.id
        }

    }
    $PostJson = createJson($NewItem)
    Write-Debug $PostJson.ToString()
    #Read-Host -Prompt 'press enter'
    $restParams=@{
        Method = 'Post'
        URI = "$($Connection.ApiBaseURL)/$Path/"
        body = $PostJson
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\generic\New-NBGenericObject.ps1' 49
#Region '.\Public\generic\Set-NBGenericObject.ps1' -1

function Set-NBGenericObject {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$Path,
        [Parameter(Mandatory=$true,Position=1)][Object]$InputObject,
        [Parameter(Mandatory=$false)][object]$Connection=$Script:Connection
    )
    $InputObject.PSObject.Properties.Remove('url')
    $InputObject.PSObject.Properties.Remove('display_url')
    $InputObject.PSObject.Properties.Remove('primary_ip')
    
    if ($InputObject.name){
        if(!($InputObject.slug)){$InputObject|Add-Member -MemberType NoteProperty -Name 'slug' -Value (makeSlug $InputObject.name)}
        else{$InputObject.slug =(makeSlug $InputObject.name)}
    }
    if($InputObject.status){
        [string]$stat=$InputObject.status.value.ToString()
        $InputObject.PSObject.Properties.Remove('status')
        $InputObject|Add-Member -MemberType NoteProperty -Name 'status' -Value $stat
    }
    $InputObject|Get-Member -Type NoteProperty|Select-Object -ExpandProperty Name|ForEach-Object { 
        if($deviceObj.$_.id){
            $InputObject.$_ = $InputObject.$_.id
        }

    }
    [PSCustomObject]$PatchObj=@{}
    [array]$keys=$InputObject|Get-Member -MemberType NoteProperty|select -ExpandProperty Name
    $keys|%{ $PatchObj|Add-Member -MemberType NoteProperty -Name $_ -Value $InputObject.$_}
    $PostJson = createJson($PatchObj)
    Write-Debug "[$($PostJson.ToString())]"

    $restParams=@{
        Method = 'Patch'
        URI = "$($Connection.ApiBaseURL)/$Path/$($InputObject.id)/"
        body = "$PostJson"
    }
    
    $PostObject=Invoke-CustomRequest -restParams $restParams -Connection $Connection
    if ($PostObject.message) {
        throw $PostObject.message
    }
    $PostObject

}
#EndRegion '.\Public\generic\Set-NBGenericObject.ps1' 46
#Region '.\Public\Get-NBCurrentConnection.ps1' -1

function Get-NBCurrentConnection {
    "Default Netbox Connection:"
    $Script:Connection
}
#EndRegion '.\Public\Get-NBCurrentConnection.ps1' 5
#Region '.\Public\New-NBConnection.ps1' -1

function New-NBConnection {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,Position=0)][string]$DeviceAddress,
        [Parameter(Mandatory=$true,Position=1)][string]$ApiKey,
        [Parameter(Mandatory=$false)][switch]$SkipCertificateCheck,
        [Parameter(Mandatory=$false)][switch]$Passthru
    )
    $ConnectionProperties = @{
        Address = "$DeviceAddress"
        ApiKey = $ApiKey
        ApiBaseUrl = "https://$($DeviceAddress)/api"
        SkipCertificateCheck = $SkipCertificateCheck
    }
    $Connection = New-Object psobject -Property $ConnectionProperties
    Write-Verbose "[$($MyInvocation.MyCommand.Name)] Host '$($Connection.Address)' is now the default connection."
    $Script:Connection = $Connection
    if ($Passthru) {
        $Connection
    }
}
#EndRegion '.\Public\New-NBConnection.ps1' 22
#Region '.\Public\Test-NBConnection.ps1' -1

function Test-NBConnection {
    [CmdletBinding()]
    param (
        [Parameter(ValueFromPipeline=$true,Mandatory=$false,Position=0)][object]$NBConnection=$Script:Connection
    )
    Write-Verbose "[$($MyInvocation.MyCommand.Name)] Trying to connect"
    try {
        "Connection OK`nNetbox Version: "+(Get-NBStatus -Connection $NBConnection)."netbox-version"
    }
    catch {
        write-error "failed"
        $NBConnection
    }
}
#EndRegion '.\Public\Test-NBConnection.ps1' 15