diff --git a/Functions/IPAM/VLAN/Get-NetboxIPAMVLAN.ps1 b/Functions/IPAM/VLAN/Get-NetboxIPAMVLAN.ps1 index 67f023c..b384e3b 100644 --- a/Functions/IPAM/VLAN/Get-NetboxIPAMVLAN.ps1 +++ b/Functions/IPAM/VLAN/Get-NetboxIPAMVLAN.ps1 @@ -61,7 +61,7 @@ function Get-NetboxIPAMVLAN { [switch]$Raw ) - + switch ($PSCmdlet.ParameterSetName) { 'ById' { foreach ($VLAN_ID in $Id) { diff --git a/Functions/Setup/Connect-NetboxAPI.ps1 b/Functions/Setup/Connect-NetboxAPI.ps1 index cd36c32..89e900c 100644 --- a/Functions/Setup/Connect-NetboxAPI.ps1 +++ b/Functions/Setup/Connect-NetboxAPI.ps1 @@ -144,10 +144,10 @@ } else { Write-Verbose "Found compatible version [$($script:NetboxConfig.NetboxVersion.'netbox-version')]!" } - + $script:NetboxConfig.Connected = $true Write-Verbose "Successfully connected!" - + $script:NetboxConfig.ContentTypes = Get-NetboxContentType -Limit 500 Write-Verbose "Connection process completed" diff --git a/Functions/Setup/Support/Get-NetboxContentType.ps1 b/Functions/Setup/Support/Get-NetboxContentType.ps1 index 192a6f2..57f7951 100644 --- a/Functions/Setup/Support/Get-NetboxContentType.ps1 +++ b/Functions/Setup/Support/Get-NetboxContentType.ps1 @@ -1,88 +1,88 @@ -function Get-NetboxContentType { +function Get-NetboxContentType { <# .SYNOPSIS Get a content type definition from Netbox - + .DESCRIPTION A detailed description of the Get-NetboxContentType function. - + .PARAMETER Model A description of the Model parameter. - + .PARAMETER Id The database ID of the contact role - + .PARAMETER App_Label A description of the App_Label parameter. - + .PARAMETER Query A standard search query that will match one or more contact roles. - + .PARAMETER Limit Limit the number of results to this number - + .PARAMETER Offset Start the search at this index in results - + .PARAMETER Raw Return the unparsed data from the HTTP request - + .EXAMPLE PS C:\> Get-NetboxContentType - + .NOTES Additional information about the function. #> - + [CmdletBinding(DefaultParameterSetName = 'Query')] param ( [Parameter(ParameterSetName = 'Query', Position = 0)] [string]$Model, - + [Parameter(ParameterSetName = 'ByID')] [uint32[]]$Id, - + [Parameter(ParameterSetName = 'Query')] [string]$App_Label, - + [Parameter(ParameterSetName = 'Query')] [string]$Query, - + [Parameter(ParameterSetName = 'Query')] [uint16]$Limit, - + [Parameter(ParameterSetName = 'Query')] [uint16]$Offset, - + [switch]$Raw ) - + switch ($PSCmdlet.ParameterSetName) { 'ById' { foreach ($ContentType_ID in $Id) { $Segments = [System.Collections.ArrayList]::new(@('extras', 'content-types', $ContentType_ID)) - + $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id' - + $uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters - + InvokeNetboxRequest -URI $uri -Raw:$Raw } - + break } - + default { $Segments = [System.Collections.ArrayList]::new(@('extras', 'content-types')) - + $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters - + $uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters - + InvokeNetboxRequest -URI $uri -Raw:$Raw - + break } } diff --git a/Functions/Tenancy/ContactAssignment/Get-NetboxContactAssignment.ps1 b/Functions/Tenancy/ContactAssignment/Get-NetboxContactAssignment.ps1 index 1f4e0e1..e1f28c9 100644 --- a/Functions/Tenancy/ContactAssignment/Get-NetboxContactAssignment.ps1 +++ b/Functions/Tenancy/ContactAssignment/Get-NetboxContactAssignment.ps1 @@ -1,107 +1,107 @@ - + function Get-NetboxContactAssignment { <# .SYNOPSIS Get a contact Assignment from Netbox - + .DESCRIPTION A detailed description of the Get-NetboxContactAssignment function. - + .PARAMETER Name The specific name of the contact Assignment. Must match exactly as is defined in Netbox - + .PARAMETER Id The database ID of the contact Assignment - + .PARAMETER Content_Type_Id A description of the Content_Type_Id parameter. - + .PARAMETER Content_Type A description of the Content_Type parameter. - + .PARAMETER Object_Id A description of the Object_Id parameter. - + .PARAMETER Contact_Id A description of the Contact_Id parameter. - + .PARAMETER Role_Id A description of the Role_Id parameter. - + .PARAMETER Limit Limit the number of results to this number - + .PARAMETER Offset Start the search at this index in results - + .PARAMETER Raw Return the unparsed data from the HTTP request - + .EXAMPLE PS C:\> Get-NetboxContactAssignment - + .NOTES Additional information about the function. #> - + [CmdletBinding(DefaultParameterSetName = 'Query')] param ( [Parameter(ParameterSetName = 'Query', Position = 0)] [string]$Name, - + [Parameter(ParameterSetName = 'ByID')] [uint32[]]$Id, - + [Parameter(ParameterSetName = 'Query')] [uint32]$Content_Type_Id, - + [Parameter(ParameterSetName = 'Query')] [string]$Content_Type, - + [Parameter(ParameterSetName = 'Query')] [uint32]$Object_Id, - + [Parameter(ParameterSetName = 'Query')] [uint32]$Contact_Id, - + [Parameter(ParameterSetName = 'Query')] [uint32]$Role_Id, - + [Parameter(ParameterSetName = 'Query')] [uint16]$Limit, - + [Parameter(ParameterSetName = 'Query')] [uint16]$Offset, - + [switch]$Raw ) - + switch ($PSCmdlet.ParameterSetName) { 'ById' { foreach ($ContactAssignment_ID in $Id) { $Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contact-assignments', $ContactAssignment_ID)) - + $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id' - + $uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters - + InvokeNetboxRequest -URI $uri -Raw:$Raw } - + break } - + default { $Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contact-assignments')) - + $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters - + $uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters - + InvokeNetboxRequest -URI $uri -Raw:$Raw - + break } } diff --git a/Functions/Tenancy/ContactAssignment/New-NetboxContactAssignment.ps1 b/Functions/Tenancy/ContactAssignment/New-NetboxContactAssignment.ps1 index 9bc6a7c..28932c9 100644 --- a/Functions/Tenancy/ContactAssignment/New-NetboxContactAssignment.ps1 +++ b/Functions/Tenancy/ContactAssignment/New-NetboxContactAssignment.ps1 @@ -1,37 +1,37 @@ - + function New-NetboxContactRole { <# .SYNOPSIS Create a new contact role in Netbox - + .DESCRIPTION Creates a new contact role object in Netbox - + .PARAMETER Content_Type A description of the Content_Type parameter. - + .PARAMETER Object_Id A description of the Object_Id parameter. - + .PARAMETER Contact A description of the Contact parameter. - + .PARAMETER Role A description of the Role parameter. - + .PARAMETER Priority A description of the Priority parameter. - + .PARAMETER Raw Return the unparsed data from the HTTP request - + .EXAMPLE PS C:\> New-NetboxContactAssignment -Name 'Leroy Jenkins' -Email 'leroy.jenkins@example.com' - + .NOTES Additional information about the function. #> - + [CmdletBinding(ConfirmImpact = 'Low', SupportsShouldProcess = $true)] [OutputType([pscustomobject])] @@ -40,22 +40,22 @@ function New-NetboxContactRole { [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)] [object]$Content_Type, - + [Parameter(Mandatory = $true)] [uint32]$Object_Id, - + [Parameter(Mandatory = $true)] [uint32]$Contact, - + [Parameter(Mandatory = $true)] [uint32]$Role, - + [ValidateSet('primary', 'secondary', 'tertiary', 'inactive', IgnoreCase = $true)] [string]$Priority, - + [switch]$Raw ) - + begin { # https://docs.netbox.dev/en/stable/features/contacts/ $AllowedContentTypes = @{ @@ -75,11 +75,11 @@ function New-NetboxContactRole { 61 = "virtualization.virtualmachine" } } - + process { $Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contact-assignment')) $Method = 'POST' - + if ($Content_Type -is [string]) { # Need to convert this to an integer $Content_Type = ($AllowedContentTypes.GetEnumerator() | Where-Object { @@ -92,11 +92,11 @@ function New-NetboxContactRole { } else { throw "Invalid content type defined" } - + $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters - + $URI = BuildNewURI -Segments $URIComponents.Segments - + if ($PSCmdlet.ShouldProcess($Address, 'Create new contact assignment')) { InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw } diff --git a/Functions/Tenancy/ContactRoles/Get-NetboxContactRole.ps1 b/Functions/Tenancy/ContactRoles/Get-NetboxContactRole.ps1 index f619189..bfe72aa 100644 --- a/Functions/Tenancy/ContactRoles/Get-NetboxContactRole.ps1 +++ b/Functions/Tenancy/ContactRoles/Get-NetboxContactRole.ps1 @@ -1,89 +1,89 @@ - + function Get-NetboxContactRole { <# .SYNOPSIS Get a contact role from Netbox - + .DESCRIPTION A detailed description of the Get-NetboxContactRole function. - + .PARAMETER Name The specific name of the contact role. Must match exactly as is defined in Netbox - + .PARAMETER Id The database ID of the contact role - + .PARAMETER Query A standard search query that will match one or more contact roles. - + .PARAMETER Limit Limit the number of results to this number - + .PARAMETER Offset Start the search at this index in results - + .PARAMETER Raw Return the unparsed data from the HTTP request - + .EXAMPLE PS C:\> Get-NetboxContactRole - + .NOTES Additional information about the function. #> - + [CmdletBinding(DefaultParameterSetName = 'Query')] param ( [Parameter(ParameterSetName = 'Query', Position = 0)] [string]$Name, - + [Parameter(ParameterSetName = 'ByID')] [uint32[]]$Id, - + [Parameter(ParameterSetName = 'Query')] [string]$Query, - + [Parameter(ParameterSetName = 'Query')] [string]$Slug, - + [Parameter(ParameterSetName = 'Query')] [string]$Description, - + [Parameter(ParameterSetName = 'Query')] [uint16]$Limit, - + [Parameter(ParameterSetName = 'Query')] [uint16]$Offset, - + [switch]$Raw ) - + switch ($PSCmdlet.ParameterSetName) { 'ById' { foreach ($ContactRole_ID in $Id) { $Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contact-roles', $ContactRole_ID)) - + $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id' - + $uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters - + InvokeNetboxRequest -URI $uri -Raw:$Raw } - + break } - + default { $Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contact-roles')) - + $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters - + $uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters - + InvokeNetboxRequest -URI $uri -Raw:$Raw - + break } } diff --git a/Functions/Tenancy/ContactRoles/New-NetboxContactRole.ps1 b/Functions/Tenancy/ContactRoles/New-NetboxContactRole.ps1 index 740383a..50ce77a 100644 --- a/Functions/Tenancy/ContactRoles/New-NetboxContactRole.ps1 +++ b/Functions/Tenancy/ContactRoles/New-NetboxContactRole.ps1 @@ -1,34 +1,34 @@ - + function New-NetboxContactRole { <# .SYNOPSIS Create a new contact role in Netbox - + .DESCRIPTION Creates a new contact role object in Netbox - + .PARAMETER Name The contact role name, e.g "Network Support" - + .PARAMETER Slug The unique URL for the role. Can only contain hypens, A-Z, a-z, 0-9, and underscores - + .PARAMETER Description Short description of the contact role - + .PARAMETER Custom_Fields A description of the Custom_Fields parameter. - + .PARAMETER Raw Return the unparsed data from the HTTP request - + .EXAMPLE PS C:\> New-NetboxContact -Name 'Leroy Jenkins' -Email 'leroy.jenkins@example.com' - + .NOTES Additional information about the function. #> - + [CmdletBinding(ConfirmImpact = 'Low', SupportsShouldProcess = $true)] [OutputType([pscustomobject])] @@ -38,28 +38,28 @@ function New-NetboxContactRole { ValueFromPipelineByPropertyName = $true)] [ValidateLength(1, 100)] [string]$Name, - + [Parameter(Mandatory = $true)] [ValidateLength(1, 100)] [ValidatePattern('^[-a-zA-Z0-9_]+$')] [string]$Slug, - + [ValidateLength(0, 200)] [string]$Description, - + [hashtable]$Custom_Fields, - + [switch]$Raw ) - + process { $Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contacts')) $Method = 'POST' - + $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters - + $URI = BuildNewURI -Segments $URIComponents.Segments - + if ($PSCmdlet.ShouldProcess($Address, 'Create new contact')) { InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw } diff --git a/Functions/Tenancy/Contacts/Get-NetboxContact.ps1 b/Functions/Tenancy/Contacts/Get-NetboxContact.ps1 index 964b11f..c650a10 100644 --- a/Functions/Tenancy/Contacts/Get-NetboxContact.ps1 +++ b/Functions/Tenancy/Contacts/Get-NetboxContact.ps1 @@ -1,119 +1,119 @@ - + function Get-NetboxContact { <# .SYNOPSIS Get a contact from Netbox - + .DESCRIPTION Obtain a contact or contacts from Netbox by ID or query - + .PARAMETER Name The specific name of the Contact. Must match exactly as is defined in Netbox - + .PARAMETER Id The database ID of the Contact - + .PARAMETER Query A standard search query that will match one or more Contacts. - + .PARAMETER Email Email address of the contact - + .PARAMETER Title Title of the contact - + .PARAMETER Phone Telephone number of the contact - + .PARAMETER Address Physical address of the contact - + .PARAMETER Group The specific group as defined in Netbox. - + .PARAMETER GroupID The database ID of the group in Netbox - + .PARAMETER Limit Limit the number of results to this number - + .PARAMETER Offset Start the search at this index in results - + .PARAMETER Raw Return the unparsed data from the HTTP request - + .EXAMPLE PS C:\> Get-NetboxContact - + .NOTES Additional information about the function. #> - + [CmdletBinding(DefaultParameterSetName = 'Query')] param ( [Parameter(ParameterSetName = 'Query', Position = 0)] [string]$Name, - + [Parameter(ParameterSetName = 'ByID')] [uint32[]]$Id, - + [Parameter(ParameterSetName = 'Query')] [string]$Query, - + [Parameter(ParameterSetName = 'Query')] [string]$Email, - + [Parameter(ParameterSetName = 'Query')] [string]$Title, - + [Parameter(ParameterSetName = 'Query')] [string]$Phone, - + [Parameter(ParameterSetName = 'Query')] [string]$Address, - + [Parameter(ParameterSetName = 'Query')] [string]$Group, - + [Parameter(ParameterSetName = 'Query')] [uint16]$GroupID, - + [Parameter(ParameterSetName = 'Query')] [uint16]$Limit, - + [Parameter(ParameterSetName = 'Query')] [uint16]$Offset, - + [switch]$Raw ) - + switch ($PSCmdlet.ParameterSetName) { 'ById' { foreach ($Contact_ID in $Id) { $Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contacts', $Contact_ID)) - + $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id' - + $uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters - + InvokeNetboxRequest -URI $uri -Raw:$Raw } - + break } - + default { $Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contacts')) - + $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters - + $uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters - + InvokeNetboxRequest -URI $uri -Raw:$Raw - + break } } diff --git a/Functions/Tenancy/Contacts/New-NetboxContact.ps1 b/Functions/Tenancy/Contacts/New-NetboxContact.ps1 index 0e0bf02..93a158e 100644 --- a/Functions/Tenancy/Contacts/New-NetboxContact.ps1 +++ b/Functions/Tenancy/Contacts/New-NetboxContact.ps1 @@ -1,49 +1,49 @@ - + function New-NetboxContact { <# .SYNOPSIS Create a new contact in Netbox - + .DESCRIPTION Creates a new contact object in Netbox which can be linked to other objects - + .PARAMETER Name The contacts full name, e.g "Leroy Jenkins" - + .PARAMETER Email Email address of the contact - + .PARAMETER Title Job title or other title related to the contact - + .PARAMETER Phone Telephone number - + .PARAMETER Address Physical address, usually mailing address - + .PARAMETER Description Short description of the contact - + .PARAMETER Comments Detailed comments. Markdown supported. - + .PARAMETER Link URI related to the contact - + .PARAMETER Custom_Fields A description of the Custom_Fields parameter. - + .PARAMETER Raw A description of the Raw parameter. - + .EXAMPLE PS C:\> New-NetboxContact -Name 'Leroy Jenkins' -Email 'leroy.jenkins@example.com' - + .NOTES Additional information about the function. #> - + [CmdletBinding(ConfirmImpact = 'Low', SupportsShouldProcess = $true)] [OutputType([pscustomobject])] @@ -53,41 +53,41 @@ function New-NetboxContact { ValueFromPipelineByPropertyName = $true)] [ValidateLength(1, 100)] [string]$Name, - + [Parameter(Mandatory = $true)] [ValidateLength(0, 254)] [string]$Email, - + [ValidateLength(0, 100)] [string]$Title, - + [ValidateLength(0, 50)] [string]$Phone, - + [ValidateLength(0, 200)] [string]$Address, - + [ValidateLength(0, 200)] [string]$Description, - + [string]$Comments, - + [ValidateLength(0, 200)] [string]$Link, - + [hashtable]$Custom_Fields, - + [switch]$Raw ) - + process { $Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contacts')) $Method = 'POST' - + $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters - + $URI = BuildNewURI -Segments $URIComponents.Segments - + if ($PSCmdlet.ShouldProcess($Address, 'Create new contact')) { InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw } diff --git a/Functions/Tenancy/Contacts/Set-NetboxContact.ps1 b/Functions/Tenancy/Contacts/Set-NetboxContact.ps1 index 9b695c2..cc7d285 100644 --- a/Functions/Tenancy/Contacts/Set-NetboxContact.ps1 +++ b/Functions/Tenancy/Contacts/Set-NetboxContact.ps1 @@ -1,58 +1,58 @@ - + function Set-NetboxContact { <# .SYNOPSIS Update a contact in Netbox - + .DESCRIPTION Updates a contact object in Netbox which can be linked to other objects - + .PARAMETER Id A description of the Id parameter. - + .PARAMETER Name The contacts full name, e.g "Leroy Jenkins" - + .PARAMETER Email Email address of the contact - + .PARAMETER Group Database ID of assigned group - + .PARAMETER Title Job title or other title related to the contact - + .PARAMETER Phone Telephone number - + .PARAMETER Address Physical address, usually mailing address - + .PARAMETER Description Short description of the contact - + .PARAMETER Comments Detailed comments. Markdown supported. - + .PARAMETER Link URI related to the contact - + .PARAMETER Custom_Fields A description of the Custom_Fields parameter. - + .PARAMETER Force A description of the Force parameter. - + .PARAMETER Raw A description of the Raw parameter. - + .EXAMPLE PS C:\> Set-NetboxContact -Id 10 -Name 'Leroy Jenkins' -Email 'leroy.jenkins@example.com' - + .NOTES Additional information about the function. #> - + [CmdletBinding(ConfirmImpact = 'Low', SupportsShouldProcess = $true)] [OutputType([pscustomobject])] @@ -61,53 +61,53 @@ function Set-NetboxContact { [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)] [uint32[]]$Id, - + [ValidateLength(1, 100)] [string]$Name, - + [ValidateLength(0, 254)] [string]$Email, - + [uint32]$Group, - + [ValidateLength(0, 100)] [string]$Title, - + [ValidateLength(0, 50)] [string]$Phone, - + [ValidateLength(0, 200)] [string]$Address, - + [ValidateLength(0, 200)] [string]$Description, - + [string]$Comments, - + [ValidateLength(0, 200)] [string]$Link, - + [hashtable]$Custom_Fields, - + [switch]$Force, - + [switch]$Raw ) - + begin { $Method = 'PATCH' } - + process { foreach ($ContactId in $Id) { $Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contacts', $ContactId)) - + $URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id', 'Force' - + $URI = BuildNewURI -Segments $URIComponents.Segments - + $CurrentContact = Get-NetboxContact -Id $ContactId - + if ($Force -or $PSCmdlet.ShouldProcess($CurrentContact.Name, 'Update contact')) { InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw } diff --git a/Functions/Tenancy/Tenants/New-NetboxTenant.ps1 b/Functions/Tenancy/Tenants/New-NetboxTenant.ps1 index 6f7da0f..1db5600 100644 --- a/Functions/Tenancy/Tenants/New-NetboxTenant.ps1 +++ b/Functions/Tenancy/Tenants/New-NetboxTenant.ps1 @@ -1,34 +1,34 @@ - + function New-NetboxTenant { <# .SYNOPSIS Create a new tenant in Netbox - + .DESCRIPTION Creates a new tenant object in Netbox - + .PARAMETER Name The tenant name, e.g "Contoso Inc" - + .PARAMETER Slug The unique URL for the tenant. Can only contain hypens, A-Z, a-z, 0-9, and underscores - + .PARAMETER Description Short description of the tenant - + .PARAMETER Custom_Fields Hashtable of custom field values. - + .PARAMETER Raw Return the unparsed data from the HTTP request - + .EXAMPLE PS C:\> New-NetboxTenant -Name 'Contoso Inc' -Slug 'contoso-inc' - + .NOTES Additional information about the function. #> - + [CmdletBinding(ConfirmImpact = 'Low', SupportsShouldProcess = $true)] [OutputType([pscustomobject])] @@ -38,28 +38,28 @@ function New-NetboxTenant { ValueFromPipelineByPropertyName = $true)] [ValidateLength(1, 100)] [string]$Name, - + [Parameter(Mandatory = $true)] [ValidateLength(1, 100)] [ValidatePattern('^[-a-zA-Z0-9_]+$')] [string]$Slug, - + [ValidateLength(0, 200)] [string]$Description, - + [hashtable]$Custom_Fields, - + [switch]$Raw ) - + process { $Segments = [System.Collections.ArrayList]::new(@('tenancy', 'tenants')) $Method = 'POST' - + $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters - + $URI = BuildNewURI -Segments $URIComponents.Segments - + if ($PSCmdlet.ShouldProcess($Address, 'Create new tenant')) { InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw }