diff --git a/Functions/Circuits/Circuits/Get-NetboxCircuit.ps1 b/Functions/Circuits/Circuits/Get-NetboxCircuit.ps1 index 34b2ced..6664395 100644 --- a/Functions/Circuits/Circuits/Get-NetboxCircuit.ps1 +++ b/Functions/Circuits/Circuits/Get-NetboxCircuit.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:15 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxCircuit.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Get-NetboxCircuit { <# .SYNOPSIS diff --git a/Functions/Circuits/Circuits/New-NetboxCircuit.ps1 b/Functions/Circuits/Circuits/New-NetboxCircuit.ps1 index 650a006..8198749 100644 --- a/Functions/Circuits/Circuits/New-NetboxCircuit.ps1 +++ b/Functions/Circuits/Circuits/New-NetboxCircuit.ps1 @@ -1,18 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181 - Created on: 2020-11-04 11:48 - Created by: Claussen - Organization: NEOnet - Filename: New-NetboxCircuit.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - - + function New-NetboxCircuit { [CmdletBinding(ConfirmImpact = 'Low', SupportsShouldProcess = $true)] diff --git a/Functions/Circuits/Providers/Get-NetboxCircuitProvider.ps1 b/Functions/Circuits/Providers/Get-NetboxCircuitProvider.ps1 index 8e392e0..8942e44 100644 --- a/Functions/Circuits/Providers/Get-NetboxCircuitProvider.ps1 +++ b/Functions/Circuits/Providers/Get-NetboxCircuitProvider.ps1 @@ -1,18 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181 - Created on: 2020-11-04 12:06 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxCircuitProvider.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - - + function Get-NetboxCircuitProvider { [CmdletBinding(DefaultParameterSetName = 'Query')] param diff --git a/Functions/Circuits/Terminations/Get-NetboxCircuitTermination.ps1 b/Functions/Circuits/Terminations/Get-NetboxCircuitTermination.ps1 index 930c244..c8d46ba 100644 --- a/Functions/Circuits/Terminations/Get-NetboxCircuitTermination.ps1 +++ b/Functions/Circuits/Terminations/Get-NetboxCircuitTermination.ps1 @@ -1,18 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181 - Created on: 2020-11-04 10:22 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxCircuitTermination.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - - + function Get-NetboxCircuitTermination { [CmdletBinding(DefaultParameterSetName = 'Query')] param diff --git a/Functions/Circuits/Types/Get-NetboxCircuitType.ps1 b/Functions/Circuits/Types/Get-NetboxCircuitType.ps1 index 16cd88e..4296cc7 100644 --- a/Functions/Circuits/Types/Get-NetboxCircuitType.ps1 +++ b/Functions/Circuits/Types/Get-NetboxCircuitType.ps1 @@ -1,18 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181 - Created on: 2020-11-04 12:34 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxCircuitType.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - - + function Get-NetboxCircuitType { [CmdletBinding(DefaultParameterSetName = 'Query')] param diff --git a/Functions/DCIM/Devices/Get-NetboxDCIMDevice.ps1 b/Functions/DCIM/Devices/Get-NetboxDCIMDevice.ps1 index ff7237c..34184e3 100644 --- a/Functions/DCIM/Devices/Get-NetboxDCIMDevice.ps1 +++ b/Functions/DCIM/Devices/Get-NetboxDCIMDevice.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:06 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxDCIMDevice.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Get-NetboxDCIMDevice { [CmdletBinding()] #region Parameters diff --git a/Functions/DCIM/Devices/Get-NetboxDCIMDeviceRole.ps1 b/Functions/DCIM/Devices/Get-NetboxDCIMDeviceRole.ps1 index afcad80..a07f306 100644 --- a/Functions/DCIM/Devices/Get-NetboxDCIMDeviceRole.ps1 +++ b/Functions/DCIM/Devices/Get-NetboxDCIMDeviceRole.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:07 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxDCIMDeviceRole.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Get-NetboxDCIMDeviceRole { [CmdletBinding()] param diff --git a/Functions/DCIM/Devices/Get-NetboxDCIMDeviceType.ps1 b/Functions/DCIM/Devices/Get-NetboxDCIMDeviceType.ps1 index 5bd55b8..ee74128 100644 --- a/Functions/DCIM/Devices/Get-NetboxDCIMDeviceType.ps1 +++ b/Functions/DCIM/Devices/Get-NetboxDCIMDeviceType.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:07 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxDCIMDeviceType.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Get-NetboxDCIMDeviceType { [CmdletBinding()] #region Parameters diff --git a/Functions/DCIM/Devices/New-NetboxDCIMDevice.ps1 b/Functions/DCIM/Devices/New-NetboxDCIMDevice.ps1 index b99e237..ed9a51d 100644 --- a/Functions/DCIM/Devices/New-NetboxDCIMDevice.ps1 +++ b/Functions/DCIM/Devices/New-NetboxDCIMDevice.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:08 - Created by: Claussen - Organization: NEOnet - Filename: New-NetboxDCIMDevice.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function New-NetboxDCIMDevice { [CmdletBinding(ConfirmImpact = 'low', SupportsShouldProcess = $true)] diff --git a/Functions/DCIM/Devices/Remove-NetboxDCIMDevice.ps1 b/Functions/DCIM/Devices/Remove-NetboxDCIMDevice.ps1 index 747f959..a2af469 100644 --- a/Functions/DCIM/Devices/Remove-NetboxDCIMDevice.ps1 +++ b/Functions/DCIM/Devices/Remove-NetboxDCIMDevice.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:08 - Created by: Claussen - Organization: NEOnet - Filename: Remove-NetboxDCIMDevice.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Remove-NetboxDCIMDevice { <# .SYNOPSIS diff --git a/Functions/DCIM/Devices/Set-NetboxDCIMDevice.ps1 b/Functions/DCIM/Devices/Set-NetboxDCIMDevice.ps1 index 3bfac65..04e7cb2 100644 --- a/Functions/DCIM/Devices/Set-NetboxDCIMDevice.ps1 +++ b/Functions/DCIM/Devices/Set-NetboxDCIMDevice.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:08 - Created by: Claussen - Organization: NEOnet - Filename: Set-NetboxDCIMDevice.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Set-NetboxDCIMDevice { [CmdletBinding(SupportsShouldProcess = $true)] param diff --git a/Functions/DCIM/Get-NetboxDCIMPlatform.ps1 b/Functions/DCIM/Get-NetboxDCIMPlatform.ps1 index d2bd323..d6fe85f 100644 --- a/Functions/DCIM/Get-NetboxDCIMPlatform.ps1 +++ b/Functions/DCIM/Get-NetboxDCIMPlatform.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:13 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxDCIMPlatform.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Get-NetboxDCIMPlatform { [CmdletBinding()] [OutputType([pscustomobject])] diff --git a/Functions/DCIM/Interfaces/Add-NetboxDCIMInterface.ps1 b/Functions/DCIM/Interfaces/Add-NetboxDCIMInterface.ps1 index 75a5f29..d60129f 100644 --- a/Functions/DCIM/Interfaces/Add-NetboxDCIMInterface.ps1 +++ b/Functions/DCIM/Interfaces/Add-NetboxDCIMInterface.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:10 - Created by: Claussen - Organization: NEOnet - Filename: Add-NetboxDCIMInterface.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Add-NetboxDCIMInterface { [CmdletBinding()] [OutputType([pscustomobject])] diff --git a/Functions/DCIM/Interfaces/Add-NetboxDCIMInterfaceConnection.ps1 b/Functions/DCIM/Interfaces/Add-NetboxDCIMInterfaceConnection.ps1 index d848b0c..438654f 100644 --- a/Functions/DCIM/Interfaces/Add-NetboxDCIMInterfaceConnection.ps1 +++ b/Functions/DCIM/Interfaces/Add-NetboxDCIMInterfaceConnection.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:10 - Created by: Claussen - Organization: NEOnet - Filename: Add-NetboxDCIMInterfaceConnection.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Add-NetboxDCIMInterfaceConnection { <# .SYNOPSIS diff --git a/Functions/DCIM/Interfaces/Get-NetboxDCIMInterface.ps1 b/Functions/DCIM/Interfaces/Get-NetboxDCIMInterface.ps1 index f0c64f7..6fe7330 100644 --- a/Functions/DCIM/Interfaces/Get-NetboxDCIMInterface.ps1 +++ b/Functions/DCIM/Interfaces/Get-NetboxDCIMInterface.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:09 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxDCIMInterface.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Get-NetboxDCIMInterface { [CmdletBinding()] [OutputType([pscustomobject])] diff --git a/Functions/DCIM/Interfaces/Get-NetboxDCIMInterfaceConnection.ps1 b/Functions/DCIM/Interfaces/Get-NetboxDCIMInterfaceConnection.ps1 index 9c4ca22..9c90579 100644 --- a/Functions/DCIM/Interfaces/Get-NetboxDCIMInterfaceConnection.ps1 +++ b/Functions/DCIM/Interfaces/Get-NetboxDCIMInterfaceConnection.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:10 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxDCIMInterfaceConnection.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Get-NetboxDCIMInterfaceConnection { [CmdletBinding()] [OutputType([pscustomobject])] diff --git a/Functions/DCIM/Interfaces/Remove-NetboxDCIMInterface.ps1 b/Functions/DCIM/Interfaces/Remove-NetboxDCIMInterface.ps1 index 2e73c2b..8824b4c 100644 --- a/Functions/DCIM/Interfaces/Remove-NetboxDCIMInterface.ps1 +++ b/Functions/DCIM/Interfaces/Remove-NetboxDCIMInterface.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:11 - Created by: Claussen - Organization: NEOnet - Filename: Remove-NetboxDCIMInterface.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Remove-NetboxDCIMInterface { <# .SYNOPSIS diff --git a/Functions/DCIM/Interfaces/Remove-NetboxDCIMInterfaceConnection.ps1 b/Functions/DCIM/Interfaces/Remove-NetboxDCIMInterfaceConnection.ps1 index d7dc205..0d5eb5b 100644 --- a/Functions/DCIM/Interfaces/Remove-NetboxDCIMInterfaceConnection.ps1 +++ b/Functions/DCIM/Interfaces/Remove-NetboxDCIMInterfaceConnection.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:12 - Created by: Claussen - Organization: NEOnet - Filename: Remove-NetboxDCIMInterfaceConnection.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Remove-NetboxDCIMInterfaceConnection { [CmdletBinding(ConfirmImpact = 'High', SupportsShouldProcess = $true)] diff --git a/Functions/DCIM/Interfaces/Set-NetboxDCIMInterface.ps1 b/Functions/DCIM/Interfaces/Set-NetboxDCIMInterface.ps1 index d08ecd6..de7d5f2 100644 --- a/Functions/DCIM/Interfaces/Set-NetboxDCIMInterface.ps1 +++ b/Functions/DCIM/Interfaces/Set-NetboxDCIMInterface.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:11 - Created by: Claussen - Organization: NEOnet - Filename: Set-NetboxDCIMInterface.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Set-NetboxDCIMInterface { [CmdletBinding(ConfirmImpact = 'Medium', SupportsShouldProcess = $true)] diff --git a/Functions/DCIM/Interfaces/Set-NetboxDCIMInterfaceConnection.ps1 b/Functions/DCIM/Interfaces/Set-NetboxDCIMInterfaceConnection.ps1 index abe84aa..299d278 100644 --- a/Functions/DCIM/Interfaces/Set-NetboxDCIMInterfaceConnection.ps1 +++ b/Functions/DCIM/Interfaces/Set-NetboxDCIMInterfaceConnection.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:11 - Created by: Claussen - Organization: NEOnet - Filename: Set-NetboxDCIMInterfaceConnection.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Set-NetboxDCIMInterfaceConnection { <# .SYNOPSIS diff --git a/Functions/DCIM/Sites/Get-NetboxDCIMSite.ps1 b/Functions/DCIM/Sites/Get-NetboxDCIMSite.ps1 index 90c6e2a..932644c 100644 --- a/Functions/DCIM/Sites/Get-NetboxDCIMSite.ps1 +++ b/Functions/DCIM/Sites/Get-NetboxDCIMSite.ps1 @@ -1,20 +1,6 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181 - Created on: 2020-10-02 15:52 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxDCIMSite.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - - + function Get-NetboxDCIMSite { - [CmdletBinding()] + [CmdletBinding(DefaultParameterSetName = 'Query')] [OutputType([pscustomobject])] param ( @@ -107,4 +93,3 @@ function Get-NetboxDCIMSite { } } } - diff --git a/Functions/DCIM/Sites/New-NetboxDCIMSite.ps1 b/Functions/DCIM/Sites/New-NetboxDCIMSite.ps1 new file mode 100644 index 0000000..38e5ac3 --- /dev/null +++ b/Functions/DCIM/Sites/New-NetboxDCIMSite.ps1 @@ -0,0 +1,86 @@ +<# + .NOTES + =========================================================================== + Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181 + Created on: 2020-10-02 15:52 + Created by: Claussen + Organization: NEOnet + Filename: New-NetboxDCIMSite.ps1 + =========================================================================== + .DESCRIPTION + A description of the file. +#> + + + +function New-NetboxDCIMSite { + <# + .SYNOPSIS + Create a new Site to Netbox + + .DESCRIPTION + Create a new Site to Netbox + + .EXAMPLE + New-NetboxDCIMSite -name MySite + + Add new Site MySite on Netbox + + #> + + [CmdletBinding(ConfirmImpact = 'Low', + SupportsShouldProcess = $true)] + [OutputType([pscustomobject])] + param + ( + [Parameter(Mandatory = $true)] + [string]$Name, + + [string]$Slug, + + [string]$Facility, + + [uint32]$ASN, + + [decimal]$Latitude, + + [decimal]$Longitude, + + [string]$Contact_Name, + + [string]$Contact_Phone, + + [string]$Contact_Email, + + [int]$Tenant_Group, + + [int]$Tenant, + + [string]$Status, + + [uint32]$Region, + + [string]$Description, + + [string]$Comments, + + [switch]$Raw + ) + + process { + $Segments = [System.Collections.ArrayList]::new(@('dcim', 'sites')) + $Method = 'POST' + + if (-not $PSBoundParameters.ContainsKey('slug')) { + $PSBoundParameters.Add('slug', $name) + } + + $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters + + $URI = BuildNewURI -Segments $URIComponents.Segments + + if ($PSCmdlet.ShouldProcess($name, 'Create new Site')) { + InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw + } + } +} diff --git a/Functions/DCIM/Sites/Remove-NetboxDCIMSite.ps1 b/Functions/DCIM/Sites/Remove-NetboxDCIMSite.ps1 new file mode 100644 index 0000000..a87737c --- /dev/null +++ b/Functions/DCIM/Sites/Remove-NetboxDCIMSite.ps1 @@ -0,0 +1,64 @@ +<# + .NOTES + =========================================================================== + Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181 + Created on: 2020-10-02 15:52 + Created by: Claussen + Organization: NEOnet + Filename: New-NetboxDCIMSite.ps1 + =========================================================================== + .DESCRIPTION + A description of the file. +#> + + +function Remove-NetboxDCIMSite { + <# + .SYNOPSIS + Remove a Site + + .DESCRIPTION + Remove a DCIM Site from Netbox + + .EXAMPLE + Remove-NetboxDCIMSite -Id 1 + + Remove DCM Site with id 1 + + .EXAMPLE + Get-NetboxDCIMSite -name My Site | Remove-NetboxDCIMSite -confirm:$false + + Remove DCM Site with name My Site without confirmation + + #> + + [CmdletBinding(ConfirmImpact = 'High', + SupportsShouldProcess = $true)] + param + ( + [Parameter(Mandatory = $true, + ValueFromPipelineByPropertyName = $true)] + [uint]$Id + + ) + + begin { + + } + + process { + $CurrentSite = Get-NetboxDCIMSite -Id $Id -ErrorAction Stop + + if ($pscmdlet.ShouldProcess("$($CurrentSite.Name)/$($CurrentSite.Id)", "Remove Site")) { + $Segments = [System.Collections.ArrayList]::new(@('dcim', 'sites', $CurrentSite.Id)) + + $URI = BuildNewURI -Segments $Segments + + InvokeNetboxRequest -URI $URI -Method DELETE + } + } + + end { + + } +} \ No newline at end of file diff --git a/Functions/Helpers/BuildNewURI.ps1 b/Functions/Helpers/BuildNewURI.ps1 index 700f339..b7a734b 100644 --- a/Functions/Helpers/BuildNewURI.ps1 +++ b/Functions/Helpers/BuildNewURI.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/26/2020 14:22 - Created by: Claussen - Organization: NEOnet - Filename: BuildNewURI.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function BuildNewURI { <# .SYNOPSIS diff --git a/Functions/Helpers/BuildURIComponents.ps1 b/Functions/Helpers/BuildURIComponents.ps1 index d9f60a8..54a13b5 100644 --- a/Functions/Helpers/BuildURIComponents.ps1 +++ b/Functions/Helpers/BuildURIComponents.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/26/2020 14:23 - Created by: Claussen - Organization: NEOnet - Filename: BuildURIComponents.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function BuildURIComponents { [CmdletBinding()] [OutputType([hashtable])] diff --git a/Functions/Helpers/CheckNetboxIsConnected.ps1 b/Functions/Helpers/CheckNetboxIsConnected.ps1 index aca5057..a3d8e4d 100644 --- a/Functions/Helpers/CheckNetboxIsConnected.ps1 +++ b/Functions/Helpers/CheckNetboxIsConnected.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/26/2020 14:22 - Created by: Claussen - Organization: NEOnet - Filename: CheckNetboxIsConnected.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function CheckNetboxIsConnected { [CmdletBinding()] param () diff --git a/Functions/Helpers/CreateEnum.ps1 b/Functions/Helpers/CreateEnum.ps1 index 89fe25a..1aa9595 100644 --- a/Functions/Helpers/CreateEnum.ps1 +++ b/Functions/Helpers/CreateEnum.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/26/2020 14:25 - Created by: Claussen - Organization: NEOnet - Filename: CreateEnum.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function CreateEnum { [CmdletBinding()] param diff --git a/Functions/Helpers/Get-ModelDefinition.ps1 b/Functions/Helpers/Get-ModelDefinition.ps1 index c8969c9..ac121b9 100644 --- a/Functions/Helpers/Get-ModelDefinition.ps1 +++ b/Functions/Helpers/Get-ModelDefinition.ps1 @@ -1,18 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181 - Created on: 2020-11-04 14:23 - Created by: Claussen - Organization: NEOnet - Filename: Get-ModelDefinition.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - - + function Get-ModelDefinition { [CmdletBinding(DefaultParameterSetName = 'ByName')] param diff --git a/Functions/Helpers/GetNetboxAPIErrorBody.ps1 b/Functions/Helpers/GetNetboxAPIErrorBody.ps1 index 96bd3fe..bf70d02 100644 --- a/Functions/Helpers/GetNetboxAPIErrorBody.ps1 +++ b/Functions/Helpers/GetNetboxAPIErrorBody.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/26/2020 14:23 - Created by: Claussen - Organization: NEOnet - Filename: GetNetboxAPIErrorBody.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function GetNetboxAPIErrorBody { param ( diff --git a/Functions/Helpers/InvokeNetboxRequest.ps1 b/Functions/Helpers/InvokeNetboxRequest.ps1 index 9696518..d48a5b3 100644 --- a/Functions/Helpers/InvokeNetboxRequest.ps1 +++ b/Functions/Helpers/InvokeNetboxRequest.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/26/2020 14:24 - Created by: Claussen - Organization: NEOnet - Filename: InvokeNetboxRequest.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function InvokeNetboxRequest { [CmdletBinding()] param diff --git a/Functions/Helpers/ThrowNetboxRESTError.ps1 b/Functions/Helpers/ThrowNetboxRESTError.ps1 index 078de90..06328fe 100644 --- a/Functions/Helpers/ThrowNetboxRESTError.ps1 +++ b/Functions/Helpers/ThrowNetboxRESTError.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/26/2020 14:25 - Created by: Claussen - Organization: NEOnet - Filename: ThrowNetboxRESTError.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function ThrowNetboxRESTError { $uriSegments = [System.Collections.ArrayList]::new(@('fake', 'url')) diff --git a/Functions/IPAM/Address/Get-NetboxIPAMAddress.ps1 b/Functions/IPAM/Address/Get-NetboxIPAMAddress.ps1 index 0074030..fbc9994 100644 --- a/Functions/IPAM/Address/Get-NetboxIPAMAddress.ps1 +++ b/Functions/IPAM/Address/Get-NetboxIPAMAddress.ps1 @@ -16,7 +16,7 @@ [object]$Family, [Parameter(ParameterSetName = 'Query')] - [uint32]$Parent, + [string]$Parent, [Parameter(ParameterSetName = 'Query')] [byte]$Mask_Length, diff --git a/Functions/IPAM/Address/Get-NetboxIPAMAvailableIP.ps1 b/Functions/IPAM/Address/Get-NetboxIPAMAvailableIP.ps1 index e026cb8..d0699cb 100644 --- a/Functions/IPAM/Address/Get-NetboxIPAMAvailableIP.ps1 +++ b/Functions/IPAM/Address/Get-NetboxIPAMAvailableIP.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 11:50 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxIPAMAvailableIP.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Get-NetboxIPAMAvailableIP { <# .SYNOPSIS diff --git a/Functions/IPAM/Address/New-NetboxIPAMAddress.ps1 b/Functions/IPAM/Address/New-NetboxIPAMAddress.ps1 index 8650d9a..bffe7ad 100644 --- a/Functions/IPAM/Address/New-NetboxIPAMAddress.ps1 +++ b/Functions/IPAM/Address/New-NetboxIPAMAddress.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 11:51 - Created by: Claussen - Organization: NEOnet - Filename: New-NetboxIPAMAddress.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function New-NetboxIPAMAddress { <# .SYNOPSIS diff --git a/Functions/IPAM/Address/Remove-NetboxIPAMAddress.ps1 b/Functions/IPAM/Address/Remove-NetboxIPAMAddress.ps1 index 3173473..0ae5e42 100644 --- a/Functions/IPAM/Address/Remove-NetboxIPAMAddress.ps1 +++ b/Functions/IPAM/Address/Remove-NetboxIPAMAddress.ps1 @@ -1,16 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 11:52 - Created by: Claussen - Organization: NEOnet - Filename: Remove-NetboxIPAMAddress.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - + function Remove-NetboxIPAMAddress { <# .SYNOPSIS diff --git a/Functions/IPAM/Address/Set-NetboxIPAMAddress.ps1 b/Functions/IPAM/Address/Set-NetboxIPAMAddress.ps1 index ee1447f..7718a84 100644 --- a/Functions/IPAM/Address/Set-NetboxIPAMAddress.ps1 +++ b/Functions/IPAM/Address/Set-NetboxIPAMAddress.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 11:53 - Created by: Claussen - Organization: NEOnet - Filename: Set-NetboxIPAMAddress.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Set-NetboxIPAMAddress { [CmdletBinding(ConfirmImpact = 'Medium', SupportsShouldProcess = $true)] diff --git a/Functions/IPAM/Aggregate/Get-NetboxIPAMAggregate.ps1 b/Functions/IPAM/Aggregate/Get-NetboxIPAMAggregate.ps1 index 87e82da..0e99585 100644 --- a/Functions/IPAM/Aggregate/Get-NetboxIPAMAggregate.ps1 +++ b/Functions/IPAM/Aggregate/Get-NetboxIPAMAggregate.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 11:49 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxIPAMAggregate.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Get-NetboxIPAMAggregate { [CmdletBinding(DefaultParameterSetName = 'Query')] param diff --git a/Functions/IPAM/Prefix/Get-NetboxIPAMPrefix.ps1 b/Functions/IPAM/Prefix/Get-NetboxIPAMPrefix.ps1 index 11a5fd0..a680369 100644 --- a/Functions/IPAM/Prefix/Get-NetboxIPAMPrefix.ps1 +++ b/Functions/IPAM/Prefix/Get-NetboxIPAMPrefix.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 11:51 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxIPAMPrefix.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Get-NetboxIPAMPrefix { <# .SYNOPSIS diff --git a/Functions/IPAM/Prefix/New-NetboxIPAMPrefix.ps1 b/Functions/IPAM/Prefix/New-NetboxIPAMPrefix.ps1 index ea728b0..979cbdc 100644 --- a/Functions/IPAM/Prefix/New-NetboxIPAMPrefix.ps1 +++ b/Functions/IPAM/Prefix/New-NetboxIPAMPrefix.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 11:52 - Created by: Claussen - Organization: NEOnet - Filename: New-NetboxIPAMPrefix.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function New-NetboxIPAMPrefix { [CmdletBinding(ConfirmImpact = 'low', SupportsShouldProcess = $true)] diff --git a/Functions/IPAM/Prefix/Set-NetboxIPAMPrefix.ps1 b/Functions/IPAM/Prefix/Set-NetboxIPAMPrefix.ps1 index 8a6b384..025fdda 100644 --- a/Functions/IPAM/Prefix/Set-NetboxIPAMPrefix.ps1 +++ b/Functions/IPAM/Prefix/Set-NetboxIPAMPrefix.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2021 v5.8.186 - Created on: 2021-03-23 13:54 - Created by: Claussen - Organization: NEOnet - Filename: Set-NetboxIPAMPrefix.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Set-NetboxIPAMPrefix { [CmdletBinding(ConfirmImpact = 'Medium', SupportsShouldProcess = $true)] diff --git a/Functions/IPAM/VLAN/Get-NetboxIPAMVLAN.ps1 b/Functions/IPAM/VLAN/Get-NetboxIPAMVLAN.ps1 index fa78c1f..67f023c 100644 --- a/Functions/IPAM/VLAN/Get-NetboxIPAMVLAN.ps1 +++ b/Functions/IPAM/VLAN/Get-NetboxIPAMVLAN.ps1 @@ -1,19 +1,6 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/16/2020 16:34 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxIPAMVLAN.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Get-NetboxIPAMVLAN { - [CmdletBinding()] + [CmdletBinding(DefaultParameterSetName = 'Query')] param ( [Parameter(ParameterSetName = 'Query', @@ -74,11 +61,7 @@ function Get-NetboxIPAMVLAN { [switch]$Raw ) - - # if ($null -ne $Status) { - # $PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -VLANStatus - # } - + switch ($PSCmdlet.ParameterSetName) { 'ById' { foreach ($VLAN_ID in $Id) { diff --git a/Functions/Setup/Clear-NetboxCredential.ps1 b/Functions/Setup/Clear-NetboxCredential.ps1 new file mode 100644 index 0000000..3decf44 --- /dev/null +++ b/Functions/Setup/Clear-NetboxCredential.ps1 @@ -0,0 +1,11 @@ +function Clear-NetboxCredential { + [CmdletBinding(ConfirmImpact = 'Medium', SupportsShouldProcess = $true)] + param + ( + [switch]$Force + ) + + if ($Force -or ($PSCmdlet.ShouldProcess('Netbox Credentials', 'Clear'))) { + $script:NetboxConfig.Credential = $null + } +} diff --git a/Functions/Setup/Connect-NetboxAPI.ps1 b/Functions/Setup/Connect-NetboxAPI.ps1 index b012a0f..cd36c32 100644 --- a/Functions/Setup/Connect-NetboxAPI.ps1 +++ b/Functions/Setup/Connect-NetboxAPI.ps1 @@ -85,6 +85,8 @@ #for PowerShell (<=) 5 (Desktop), Enable TLS 1.1, 1.2 and Disable SSL chain trust if ("Desktop" -eq $PSVersionTable.PsEdition) { + #Add System.web (Need for ParseQueryString) + Add-Type -AssemblyName System.Web #Enable TLS 1.1 and 1.2 Set-NetboxCipherSSL if ($SkipCertificateCheck) { @@ -142,18 +144,11 @@ } else { Write-Verbose "Found compatible version [$($script:NetboxConfig.NetboxVersion.'netbox-version')]!" } - + $script:NetboxConfig.Connected = $true Write-Verbose "Successfully connected!" - - #Write-Verbose "Caching static choices" - #$script:NetboxConfig.Choices.Circuits = Get-NetboxCircuitsChoices - #$script:NetboxConfig.Choices.DCIM = Get-NetboxDCIMChoices # Not completed yet - #$script:NetboxConfig.Choices.Extras = Get-NetboxExtrasChoices - #$script:NetboxConfig.Choices.IPAM = Get-NetboxIPAMChoices - ##$script:NetboxConfig.Choices.Secrets = Get-NetboxSecretsChoices # Not completed yet - ##$script:NetboxConfig.Choices.Tenancy = Get-NetboxTenancyChoices - #$script:NetboxConfig.Choices.Virtualization = Get-NetboxVirtualizationChoices + + $script:NetboxConfig.ContentTypes = Get-NetboxContentType -Limit 500 Write-Verbose "Connection process completed" } \ No newline at end of file diff --git a/Functions/Setup/Support/Get-NetboxAPIDefinition.ps1 b/Functions/Setup/Support/Get-NetboxAPIDefinition.ps1 index 4fcdf0c..1e42f7a 100644 --- a/Functions/Setup/Support/Get-NetboxAPIDefinition.ps1 +++ b/Functions/Setup/Support/Get-NetboxAPIDefinition.ps1 @@ -1,18 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.174 - Created on: 4/28/2020 11:57 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxAPIDefinition.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - - + function Get-NetboxAPIDefinition { [CmdletBinding()] param () diff --git a/Functions/Setup/Support/Get-NetboxContentType.ps1 b/Functions/Setup/Support/Get-NetboxContentType.ps1 new file mode 100644 index 0000000..192a6f2 --- /dev/null +++ b/Functions/Setup/Support/Get-NetboxContentType.ps1 @@ -0,0 +1,89 @@ +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 + } + } +} \ No newline at end of file diff --git a/Functions/Setup/Support/SetupNetboxConfigVariable.ps1 b/Functions/Setup/Support/SetupNetboxConfigVariable.ps1 index a8ac41f..12e5e9c 100644 --- a/Functions/Setup/Support/SetupNetboxConfigVariable.ps1 +++ b/Functions/Setup/Support/SetupNetboxConfigVariable.ps1 @@ -13,6 +13,7 @@ 'Choices' = @{ } 'APIDefinition' = $null + 'ContentTypes' = $null } } diff --git a/Functions/Tenancy/ContactAssignment/Get-NetboxContactAssignment.ps1 b/Functions/Tenancy/ContactAssignment/Get-NetboxContactAssignment.ps1 new file mode 100644 index 0000000..1f4e0e1 --- /dev/null +++ b/Functions/Tenancy/ContactAssignment/Get-NetboxContactAssignment.ps1 @@ -0,0 +1,108 @@ + +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 + } + } +} \ No newline at end of file diff --git a/Functions/Tenancy/ContactAssignment/New-NetboxContactAssignment.ps1 b/Functions/Tenancy/ContactAssignment/New-NetboxContactAssignment.ps1 new file mode 100644 index 0000000..9bc6a7c --- /dev/null +++ b/Functions/Tenancy/ContactAssignment/New-NetboxContactAssignment.ps1 @@ -0,0 +1,108 @@ + +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])] + param + ( + [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 = @{ + 10 = "circuits.circuit" + 7 = "circuits.provider" + 19 = "dcim.device" + 25 = "dcim.location" + 29 = "dcim.manufacturer" + 77 = "dcim.powerpanel" + 20 = "dcim.rack" + 30 = "dcim.region" + 18 = "dcim.site" + 92 = "dcim.sitegroup" + 58 = "tenancy.tenant" + 63 = "virtualization.cluster" + 64 = "virtualization.clustergroup" + 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 { + $_.Value -eq $Content_Type + }).Key + } elseif ($Content_Type -is [int]) { + if ($Content_Type -notin $($AllowedContentTypes).Keys) { + throw "Invalid content type defined" + } + } 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 new file mode 100644 index 0000000..f619189 --- /dev/null +++ b/Functions/Tenancy/ContactRoles/Get-NetboxContactRole.ps1 @@ -0,0 +1,90 @@ + +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 + } + } +} \ No newline at end of file diff --git a/Functions/Tenancy/ContactRoles/New-NetboxContactRole.ps1 b/Functions/Tenancy/ContactRoles/New-NetboxContactRole.ps1 new file mode 100644 index 0000000..740383a --- /dev/null +++ b/Functions/Tenancy/ContactRoles/New-NetboxContactRole.ps1 @@ -0,0 +1,71 @@ + +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])] + param + ( + [Parameter(Mandatory = $true, + 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 new file mode 100644 index 0000000..964b11f --- /dev/null +++ b/Functions/Tenancy/Contacts/Get-NetboxContact.ps1 @@ -0,0 +1,120 @@ + +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 + } + } +} \ No newline at end of file diff --git a/Functions/Tenancy/Contacts/New-NetboxContact.ps1 b/Functions/Tenancy/Contacts/New-NetboxContact.ps1 new file mode 100644 index 0000000..0e0bf02 --- /dev/null +++ b/Functions/Tenancy/Contacts/New-NetboxContact.ps1 @@ -0,0 +1,99 @@ + +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])] + param + ( + [Parameter(Mandatory = $true, + 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 new file mode 100644 index 0000000..9b695c2 --- /dev/null +++ b/Functions/Tenancy/Contacts/Set-NetboxContact.ps1 @@ -0,0 +1,120 @@ + +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])] + param + ( + [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/Get-NetboxTenant.ps1 b/Functions/Tenancy/Tenants/Get-NetboxTenant.ps1 similarity index 87% rename from Functions/Tenancy/Get-NetboxTenant.ps1 rename to Functions/Tenancy/Tenants/Get-NetboxTenant.ps1 index 1e0732a..af5250e 100644 --- a/Functions/Tenancy/Get-NetboxTenant.ps1 +++ b/Functions/Tenancy/Tenants/Get-NetboxTenant.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 11:56 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxTenant.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Get-NetboxTenant { <# .SYNOPSIS diff --git a/Functions/Tenancy/Tenants/New-NetboxTenant.ps1 b/Functions/Tenancy/Tenants/New-NetboxTenant.ps1 new file mode 100644 index 0000000..6f7da0f --- /dev/null +++ b/Functions/Tenancy/Tenants/New-NetboxTenant.ps1 @@ -0,0 +1,71 @@ + +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])] + param + ( + [Parameter(Mandatory = $true, + 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 + } + } +} + + + + diff --git a/Functions/Virtualization/VirtualMachine/Get-NetboxVirtualMachine.ps1 b/Functions/Virtualization/VirtualMachine/Get-NetboxVirtualMachine.ps1 index 34884e2..742b535 100644 --- a/Functions/Virtualization/VirtualMachine/Get-NetboxVirtualMachine.ps1 +++ b/Functions/Virtualization/VirtualMachine/Get-NetboxVirtualMachine.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 12:44 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxVirtualMachine.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Get-NetboxVirtualMachine { <# .SYNOPSIS diff --git a/Functions/Virtualization/VirtualMachine/New-NetboxVirtualMachine.ps1 b/Functions/Virtualization/VirtualMachine/New-NetboxVirtualMachine.ps1 index dbab718..98d2038 100644 --- a/Functions/Virtualization/VirtualMachine/New-NetboxVirtualMachine.ps1 +++ b/Functions/Virtualization/VirtualMachine/New-NetboxVirtualMachine.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 12:44 - Created by: Claussen - Organization: NEOnet - Filename: New-NetboxVirtualMachine.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function New-NetboxVirtualMachine { [CmdletBinding(ConfirmImpact = 'low', SupportsShouldProcess = $true)] @@ -22,6 +9,8 @@ function New-NetboxVirtualMachine { [string]$Name, [Parameter(Mandatory = $true)] + [uint16]$Site, + [uint16]$Cluster, [uint16]$Tenant, @@ -56,6 +45,10 @@ function New-NetboxVirtualMachine { #$PSBoundParameters.Status = ValidateVirtualizationChoice -ProvidedValue $Status -VirtualMachineStatus + if ($PSBoundParameters.ContainsKey('Cluster') -and (-not $PSBoundParameters.ContainsKey('Site'))) { + throw "You must specify a site ID with a cluster ID" + } + $Segments = [System.Collections.ArrayList]::new(@('virtualization', 'virtual-machines')) $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters diff --git a/Functions/Virtualization/VirtualMachine/Remove-NetboxVirtualMachine.ps1 b/Functions/Virtualization/VirtualMachine/Remove-NetboxVirtualMachine.ps1 index b2cb192..ebb733a 100644 --- a/Functions/Virtualization/VirtualMachine/Remove-NetboxVirtualMachine.ps1 +++ b/Functions/Virtualization/VirtualMachine/Remove-NetboxVirtualMachine.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 12:45 - Created by: Claussen - Organization: NEOnet - Filename: Remove-NetboxVirtualMachine.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Remove-NetboxVirtualMachine { <# .SYNOPSIS diff --git a/Functions/Virtualization/VirtualMachine/Set-NetboxVirtualMachine.ps1 b/Functions/Virtualization/VirtualMachine/Set-NetboxVirtualMachine.ps1 index bba99e7..8c8ae0e 100644 --- a/Functions/Virtualization/VirtualMachine/Set-NetboxVirtualMachine.ps1 +++ b/Functions/Virtualization/VirtualMachine/Set-NetboxVirtualMachine.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 12:45 - Created by: Claussen - Organization: NEOnet - Filename: Set-NetboxVirtualMachine.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Set-NetboxVirtualMachine { [CmdletBinding(ConfirmImpact = 'Medium', SupportsShouldProcess = $true)] diff --git a/Functions/Virtualization/VirtualMachineInterface/Add-NetboxVirtualMachineInterface.ps1 b/Functions/Virtualization/VirtualMachineInterface/Add-NetboxVirtualMachineInterface.ps1 index e197244..47a04a9 100644 --- a/Functions/Virtualization/VirtualMachineInterface/Add-NetboxVirtualMachineInterface.ps1 +++ b/Functions/Virtualization/VirtualMachineInterface/Add-NetboxVirtualMachineInterface.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 12:46 - Created by: Claussen - Organization: NEOnet - Filename: Add-NetboxVirtualMachineInterface.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Add-NetboxVirtualMachineInterface { [CmdletBinding()] param diff --git a/Functions/Virtualization/VirtualMachineInterface/Get-NetboxVirtualMachineInterface.ps1 b/Functions/Virtualization/VirtualMachineInterface/Get-NetboxVirtualMachineInterface.ps1 index 1b85127..d20d019 100644 --- a/Functions/Virtualization/VirtualMachineInterface/Get-NetboxVirtualMachineInterface.ps1 +++ b/Functions/Virtualization/VirtualMachineInterface/Get-NetboxVirtualMachineInterface.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 12:47 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxVirtualMachineInterface.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Get-NetboxVirtualMachineInterface { <# .SYNOPSIS diff --git a/Functions/Virtualization/VirtualMachineInterface/Set-NetboxVirtualMachineInterface.ps1 b/Functions/Virtualization/VirtualMachineInterface/Set-NetboxVirtualMachineInterface.ps1 index db16b46..03604ed 100644 --- a/Functions/Virtualization/VirtualMachineInterface/Set-NetboxVirtualMachineInterface.ps1 +++ b/Functions/Virtualization/VirtualMachineInterface/Set-NetboxVirtualMachineInterface.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 12:47 - Created by: Claussen - Organization: NEOnet - Filename: Set-NetboxVirtualMachineInterface.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Set-NetboxVirtualMachineInterface { [CmdletBinding(ConfirmImpact = 'Medium', SupportsShouldProcess = $true)] diff --git a/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationCluster.ps1 b/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationCluster.ps1 index 68e7f10..b151e62 100644 --- a/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationCluster.ps1 +++ b/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationCluster.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 14:10 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxVirtualizationCluster.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Get-NetboxVirtualizationCluster { <# .SYNOPSIS diff --git a/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationClusterGroup.ps1 b/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationClusterGroup.ps1 index 0269f5a..71813f7 100644 --- a/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationClusterGroup.ps1 +++ b/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationClusterGroup.ps1 @@ -1,17 +1,4 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 14:11 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxVirtualizationClusterGroup.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - + function Get-NetboxVirtualizationClusterGroup { [CmdletBinding()] param diff --git a/NetboxPS.psd1 b/NetboxPS.psd1 index 3cb6799..401b317 100644 --- a/NetboxPS.psd1 +++ b/NetboxPS.psd1 @@ -3,7 +3,7 @@ # # Generated by: Ben Claussen # -# Generated on: 2021-07-23 +# Generated on: 2023-02-24 # @{ @@ -12,7 +12,7 @@ RootModule = 'NetboxPS.psm1' # Version number of this module. -ModuleVersion = '1.5.0' +ModuleVersion = '1.7.1' # Supported PSEditions # CompatiblePSEditions = @() @@ -54,7 +54,7 @@ CLRVersion = '2.0.50727' # RequiredModules = @() # Assemblies that must be loaded prior to importing this module -RequiredAssemblies = 'System.Web' +# RequiredAssemblies = @() # Script files (.ps1) that are run in the caller's environment prior to importing this module. # ScriptsToProcess = @() @@ -69,7 +69,40 @@ RequiredAssemblies = 'System.Web' NestedModules = @() # Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export. -FunctionsToExport = '*' +FunctionsToExport = 'Add-NetboxDCIMInterface', 'Add-NetboxDCIMInterfaceConnection', + 'Add-NetboxVirtualMachineInterface', 'Clear-NetboxCredential', + 'Connect-NetboxAPI', 'Get-ModelDefinition', 'Get-NetboxAPIDefinition', + 'Get-NetboxCircuit', 'Get-NetboxCircuitProvider', + 'Get-NetboxCircuitTermination', 'Get-NetboxCircuitType', + 'Get-NetboxContact', 'Get-NetboxContactAssignment', + 'Get-NetboxContactRole', 'Get-NetboxContentType', + 'Get-NetboxCredential', 'Get-NetboxDCIMDevice', + 'Get-NetboxDCIMDeviceRole', 'Get-NetboxDCIMDeviceType', + 'Get-NetboxDCIMInterface', 'Get-NetboxDCIMInterfaceConnection', + 'Get-NetboxDCIMPlatform', 'Get-NetboxDCIMSite', 'Get-NetboxHostname', + 'Get-NetboxHostPort', 'Get-NetboxHostScheme', + 'Get-NetboxInvokeParams', 'Get-NetboxIPAMAddress', + 'Get-NetboxIPAMAggregate', 'Get-NetboxIPAMAvailableIP', + 'Get-NetboxIPAMPrefix', 'Get-NetboxIPAMRole', 'Get-NetboxIPAMVLAN', + 'Get-NetboxTenant', 'Get-NetboxTimeout', 'Get-NetboxVersion', + 'Get-NetboxVirtualizationCluster', + 'Get-NetboxVirtualizationClusterGroup', 'Get-NetboxVirtualMachine', + 'Get-NetboxVirtualMachineInterface', 'New-NetboxCircuit', + 'New-NetboxContact', 'New-NetboxContactAssignment', + 'New-NetboxContactRole', 'New-NetboxDCIMDevice', 'New-NetboxDCIMSite', + 'New-NetboxIPAMAddress', 'New-NetboxIPAMPrefix', 'New-NetboxIPAMVLAN', + 'New-NetboxTenant', 'New-NetboxVirtualMachine', + 'Remove-NetboxDCIMDevice', 'Remove-NetboxDCIMInterface', + 'Remove-NetboxDCIMInterfaceConnection', 'Remove-NetboxDCIMSite', + 'Remove-NetboxIPAMAddress', 'Remove-NetboxVirtualMachine', + 'Set-NetboxCipherSSL', 'Set-NetboxContact', 'Set-NetboxCredential', + 'Set-NetboxDCIMDevice', 'Set-NetboxDCIMInterface', + 'Set-NetboxDCIMInterfaceConnection', 'Set-NetboxHostName', + 'Set-NetboxHostPort', 'Set-NetboxHostScheme', + 'Set-NetboxInvokeParams', 'Set-NetboxIPAMAddress', + 'Set-NetboxIPAMPrefix', 'Set-NetboxTimeout', + 'Set-NetboxUnstrustedSSL', 'Set-NetboxVirtualMachine', + 'Set-NetboxVirtualMachineInterface' # Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export. CmdletsToExport = '*' diff --git a/NetboxPS.psm1 b/NetboxPS.psm1 index 6d66fc6..968b459 100644 --- a/NetboxPS.psm1 +++ b/NetboxPS.psm1 @@ -1,15 +1,3 @@ -<# - .NOTES - -------------------------------------------------------------------------------- - Code generated by: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Generated on: 3/26/2020 15:16 - Generated by: Claussen - Organization: NEOnet - -------------------------------------------------------------------------------- - .DESCRIPTION - Script generated by PowerShell Studio 2020 -#> - # Build a list of common parameters so we can omit them to build URI parameters $script:CommonParameterNames = New-Object System.Collections.ArrayList [void]$script:CommonParameterNames.AddRange(@([System.Management.Automation.PSCmdlet]::CommonParameters)) @@ -17,6 +5,3 @@ $script:CommonParameterNames = New-Object System.Collections.ArrayList [void]$script:CommonParameterNames.Add('Raw') SetupNetboxConfigVariable - -Export-ModuleMember -Function * -#Export-ModuleMember -Function *-* \ No newline at end of file diff --git a/NetboxPS.psproj b/NetboxPS.psproj index b71197d..91c2618 100644 --- a/NetboxPS.psproj +++ b/NetboxPS.psproj @@ -1,7 +1,9 @@ - + 2.1 bba9b06c-49c8-47cf-8358-aca7c4e78896 1 + True + Local Machine - PowerShell V5 (64 Bit) Functions Functions\DCIM @@ -28,6 +30,10 @@ Functions\Circuits\Providers Functions\Circuits\Types Functions\Circuits\Terminations + Functions\Tenancy\Contacts + Functions\Tenancy\Tenants + Functions\Tenancy\ContactRoles + Functions\Tenancy\ContactAssignment NetboxPS.psd1 @@ -48,7 +54,6 @@ Functions\Helpers\BuildURIComponents.ps1 Functions\Helpers\GetNetboxAPIErrorBody.ps1 Functions\Helpers\InvokeNetboxRequest.ps1 - Functions\Helpers\ThrowNetboxRESTError.ps1 Functions\Helpers\CreateEnum.ps1 Functions\Setup\Support\VerifyAPIConnectivity.ps1 Functions\Setup\Support\SetupNetboxConfigVariable.ps1 @@ -69,7 +74,7 @@ Functions\IPAM\Prefix\New-NetboxIPAMPrefix.ps1 Functions\IPAM\Address\Remove-NetboxIPAMAddress.ps1 Functions\IPAM\Address\Set-NetboxIPAMAddress.ps1 - Functions\Tenancy\Get-NetboxTenant.ps1 + Functions\Tenancy\Tenants\Get-NetboxTenant.ps1 Functions\Virtualization\VirtualMachine\Get-NetboxVirtualMachine.ps1 Functions\Virtualization\VirtualMachine\New-NetboxVirtualMachine.ps1 Functions\Virtualization\VirtualMachine\Set-NetboxVirtualMachine.ps1 @@ -115,6 +120,15 @@ Functions\Setup\Set-NetboxTimeout.ps1 Functions\Setup\Get-NetboxTimeout.ps1 Functions\Setup\Get-NetboxVersion.ps1 + Functions\Tenancy\Contacts\Get-NetboxContact.ps1 + Functions\Tenancy\Contacts\New-NetboxContact.ps1 + Functions\Tenancy\ContactRoles\Get-NetboxContactRole.ps1 + Functions\Tenancy\ContactRoles\New-NetboxContactRole.ps1 + Functions\Tenancy\Tenants\New-NetboxTenant.ps1 + Functions\Tenancy\ContactAssignment\Get-NetboxContactAssignment.ps1 + Functions\Setup\Support\Get-NetboxContentType.ps1 + Functions\Tenancy\ContactAssignment\New-NetboxContactAssignment.ps1 + Functions\Tenancy\Contacts\Set-NetboxContact.ps1 R:\Netbox\NetboxPS\Test-Module.ps1 \ No newline at end of file diff --git a/NetboxPS/NetboxPS.psd1 b/NetboxPS/NetboxPS.psd1 index 3cb6799..401b317 100644 --- a/NetboxPS/NetboxPS.psd1 +++ b/NetboxPS/NetboxPS.psd1 @@ -3,7 +3,7 @@ # # Generated by: Ben Claussen # -# Generated on: 2021-07-23 +# Generated on: 2023-02-24 # @{ @@ -12,7 +12,7 @@ RootModule = 'NetboxPS.psm1' # Version number of this module. -ModuleVersion = '1.5.0' +ModuleVersion = '1.7.1' # Supported PSEditions # CompatiblePSEditions = @() @@ -54,7 +54,7 @@ CLRVersion = '2.0.50727' # RequiredModules = @() # Assemblies that must be loaded prior to importing this module -RequiredAssemblies = 'System.Web' +# RequiredAssemblies = @() # Script files (.ps1) that are run in the caller's environment prior to importing this module. # ScriptsToProcess = @() @@ -69,7 +69,40 @@ RequiredAssemblies = 'System.Web' NestedModules = @() # Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export. -FunctionsToExport = '*' +FunctionsToExport = 'Add-NetboxDCIMInterface', 'Add-NetboxDCIMInterfaceConnection', + 'Add-NetboxVirtualMachineInterface', 'Clear-NetboxCredential', + 'Connect-NetboxAPI', 'Get-ModelDefinition', 'Get-NetboxAPIDefinition', + 'Get-NetboxCircuit', 'Get-NetboxCircuitProvider', + 'Get-NetboxCircuitTermination', 'Get-NetboxCircuitType', + 'Get-NetboxContact', 'Get-NetboxContactAssignment', + 'Get-NetboxContactRole', 'Get-NetboxContentType', + 'Get-NetboxCredential', 'Get-NetboxDCIMDevice', + 'Get-NetboxDCIMDeviceRole', 'Get-NetboxDCIMDeviceType', + 'Get-NetboxDCIMInterface', 'Get-NetboxDCIMInterfaceConnection', + 'Get-NetboxDCIMPlatform', 'Get-NetboxDCIMSite', 'Get-NetboxHostname', + 'Get-NetboxHostPort', 'Get-NetboxHostScheme', + 'Get-NetboxInvokeParams', 'Get-NetboxIPAMAddress', + 'Get-NetboxIPAMAggregate', 'Get-NetboxIPAMAvailableIP', + 'Get-NetboxIPAMPrefix', 'Get-NetboxIPAMRole', 'Get-NetboxIPAMVLAN', + 'Get-NetboxTenant', 'Get-NetboxTimeout', 'Get-NetboxVersion', + 'Get-NetboxVirtualizationCluster', + 'Get-NetboxVirtualizationClusterGroup', 'Get-NetboxVirtualMachine', + 'Get-NetboxVirtualMachineInterface', 'New-NetboxCircuit', + 'New-NetboxContact', 'New-NetboxContactAssignment', + 'New-NetboxContactRole', 'New-NetboxDCIMDevice', 'New-NetboxDCIMSite', + 'New-NetboxIPAMAddress', 'New-NetboxIPAMPrefix', 'New-NetboxIPAMVLAN', + 'New-NetboxTenant', 'New-NetboxVirtualMachine', + 'Remove-NetboxDCIMDevice', 'Remove-NetboxDCIMInterface', + 'Remove-NetboxDCIMInterfaceConnection', 'Remove-NetboxDCIMSite', + 'Remove-NetboxIPAMAddress', 'Remove-NetboxVirtualMachine', + 'Set-NetboxCipherSSL', 'Set-NetboxContact', 'Set-NetboxCredential', + 'Set-NetboxDCIMDevice', 'Set-NetboxDCIMInterface', + 'Set-NetboxDCIMInterfaceConnection', 'Set-NetboxHostName', + 'Set-NetboxHostPort', 'Set-NetboxHostScheme', + 'Set-NetboxInvokeParams', 'Set-NetboxIPAMAddress', + 'Set-NetboxIPAMPrefix', 'Set-NetboxTimeout', + 'Set-NetboxUnstrustedSSL', 'Set-NetboxVirtualMachine', + 'Set-NetboxVirtualMachineInterface' # Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export. CmdletsToExport = '*' diff --git a/NetboxPS/NetboxPS.psm1 b/NetboxPS/NetboxPS.psm1 index d429bbb..7cf69f2 100644 --- a/NetboxPS/NetboxPS.psm1 +++ b/NetboxPS/NetboxPS.psm1 @@ -2,19 +2,6 @@ #region File Add-NetboxDCIMInterface.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:10 - Created by: Claussen - Organization: NEOnet - Filename: Add-NetboxDCIMInterface.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Add-NetboxDCIMInterface { [CmdletBinding()] @@ -91,19 +78,6 @@ function Add-NetboxDCIMInterface { #region File Add-NetboxDCIMInterfaceConnection.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:10 - Created by: Claussen - Organization: NEOnet - Filename: Add-NetboxDCIMInterfaceConnection.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Add-NetboxDCIMInterfaceConnection { <# @@ -163,19 +137,6 @@ function Add-NetboxDCIMInterfaceConnection { #region File Add-NetboxVirtualMachineInterface.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 12:46 - Created by: Claussen - Organization: NEOnet - Filename: Add-NetboxVirtualMachineInterface.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Add-NetboxVirtualMachineInterface { [CmdletBinding()] @@ -213,19 +174,6 @@ function Add-NetboxVirtualMachineInterface { #region File BuildNewURI.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/26/2020 14:22 - Created by: Claussen - Organization: NEOnet - Filename: BuildNewURI.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function BuildNewURI { <# @@ -311,19 +259,6 @@ function BuildNewURI { #region File BuildURIComponents.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/26/2020 14:23 - Created by: Claussen - Organization: NEOnet - Filename: BuildURIComponents.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function BuildURIComponents { [CmdletBinding()] @@ -404,19 +339,6 @@ function BuildURIComponents { #region File CheckNetboxIsConnected.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/26/2020 14:22 - Created by: Claussen - Organization: NEOnet - Filename: CheckNetboxIsConnected.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function CheckNetboxIsConnected { [CmdletBinding()] @@ -438,7 +360,7 @@ function Clear-NetboxCredential { ( [switch]$Force ) - + if ($Force -or ($PSCmdlet.ShouldProcess('Netbox Credentials', 'Clear'))) { $script:NetboxConfig.Credential = $null } @@ -535,6 +457,8 @@ function Connect-NetboxAPI { #for PowerShell (<=) 5 (Desktop), Enable TLS 1.1, 1.2 and Disable SSL chain trust if ("Desktop" -eq $PSVersionTable.PsEdition) { + #Add System.web (Need for ParseQueryString) + Add-Type -AssemblyName System.Web #Enable TLS 1.1 and 1.2 Set-NetboxCipherSSL if ($SkipCertificateCheck) { @@ -592,18 +516,11 @@ function Connect-NetboxAPI { } else { Write-Verbose "Found compatible version [$($script:NetboxConfig.NetboxVersion.'netbox-version')]!" } - + $script:NetboxConfig.Connected = $true Write-Verbose "Successfully connected!" - - #Write-Verbose "Caching static choices" - #$script:NetboxConfig.Choices.Circuits = Get-NetboxCircuitsChoices - #$script:NetboxConfig.Choices.DCIM = Get-NetboxDCIMChoices # Not completed yet - #$script:NetboxConfig.Choices.Extras = Get-NetboxExtrasChoices - #$script:NetboxConfig.Choices.IPAM = Get-NetboxIPAMChoices - ##$script:NetboxConfig.Choices.Secrets = Get-NetboxSecretsChoices # Not completed yet - ##$script:NetboxConfig.Choices.Tenancy = Get-NetboxTenancyChoices - #$script:NetboxConfig.Choices.Virtualization = Get-NetboxVirtualizationChoices + + $script:NetboxConfig.ContentTypes = Get-NetboxContentType -Limit 500 Write-Verbose "Connection process completed" } @@ -612,19 +529,6 @@ function Connect-NetboxAPI { #region File CreateEnum.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/26/2020 14:25 - Created by: Claussen - Organization: NEOnet - Filename: CreateEnum.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function CreateEnum { [CmdletBinding()] @@ -658,20 +562,6 @@ public enum $EnumName #region File Get-ModelDefinition.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181 - Created on: 2020-11-04 14:23 - Created by: Claussen - Organization: NEOnet - Filename: Get-ModelDefinition.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - function Get-ModelDefinition { [CmdletBinding(DefaultParameterSetName = 'ByName')] @@ -727,20 +617,6 @@ function Get-ModelDefinition { #region File Get-NetboxAPIDefinition.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.174 - Created on: 4/28/2020 11:57 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxAPIDefinition.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - function Get-NetboxAPIDefinition { [CmdletBinding()] @@ -761,19 +637,6 @@ function Get-NetboxAPIDefinition { #region File GetNetboxAPIErrorBody.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/26/2020 14:23 - Created by: Claussen - Organization: NEOnet - Filename: GetNetboxAPIErrorBody.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function GetNetboxAPIErrorBody { param @@ -795,19 +658,6 @@ function GetNetboxAPIErrorBody { #region File Get-NetboxCircuit.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:15 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxCircuit.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Get-NetboxCircuit { <# @@ -933,20 +783,6 @@ function Get-NetboxCircuit { #region File Get-NetboxCircuitProvider.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181 - Created on: 2020-11-04 12:06 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxCircuitProvider.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - function Get-NetboxCircuitProvider { [CmdletBinding(DefaultParameterSetName = 'Query')] @@ -1010,20 +846,6 @@ function Get-NetboxCircuitProvider { #region File Get-NetboxCircuitTermination.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181 - Created on: 2020-11-04 10:22 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxCircuitTermination.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - function Get-NetboxCircuitTermination { [CmdletBinding(DefaultParameterSetName = 'Query')] @@ -1094,20 +916,6 @@ function Get-NetboxCircuitTermination { #region File Get-NetboxCircuitType.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181 - Created on: 2020-11-04 12:34 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxCircuitType.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - function Get-NetboxCircuitType { [CmdletBinding(DefaultParameterSetName = 'Query')] @@ -1169,6 +977,433 @@ function GetNetboxConfigVariable { #endregion +#region File Get-NetboxContact.ps1 + + +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 + } + } +} + +#endregion + +#region File Get-NetboxContactAssignment.ps1 + + +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 + } + } +} + +#endregion + +#region File Get-NetboxContactRole.ps1 + + +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 + } + } +} + +#endregion + +#region File Get-NetboxContentType.ps1 + +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 + } + } +} + +#endregion + #region File Get-NetboxCredential.ps1 function Get-NetboxCredential { @@ -1187,19 +1422,6 @@ function Get-NetboxCredential { #region File Get-NetboxDCIMDevice.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:06 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxDCIMDevice.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Get-NetboxDCIMDevice { [CmdletBinding()] @@ -1293,19 +1515,6 @@ function Get-NetboxDCIMDevice { #region File Get-NetboxDCIMDeviceRole.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:07 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxDCIMDeviceRole.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Get-NetboxDCIMDeviceRole { [CmdletBinding()] @@ -1360,19 +1569,6 @@ function Get-NetboxDCIMDeviceRole { #region File Get-NetboxDCIMDeviceType.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:07 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxDCIMDeviceType.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Get-NetboxDCIMDeviceType { [CmdletBinding()] @@ -1426,19 +1622,6 @@ function Get-NetboxDCIMDeviceType { #region File Get-NetboxDCIMInterface.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:09 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxDCIMInterface.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Get-NetboxDCIMInterface { [CmdletBinding()] @@ -1494,19 +1677,6 @@ function Get-NetboxDCIMInterface { #region File Get-NetboxDCIMInterfaceConnection.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:10 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxDCIMInterfaceConnection.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Get-NetboxDCIMInterfaceConnection { [CmdletBinding()] @@ -1545,19 +1715,6 @@ function Get-NetboxDCIMInterfaceConnection { #region File Get-NetboxDCIMPlatform.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:13 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxDCIMPlatform.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Get-NetboxDCIMPlatform { [CmdletBinding()] @@ -1613,23 +1770,9 @@ function Get-NetboxDCIMPlatform { #region File Get-NetboxDCIMSite.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181 - Created on: 2020-10-02 15:52 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxDCIMSite.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - function Get-NetboxDCIMSite { - [CmdletBinding()] + [CmdletBinding(DefaultParameterSetName = 'Query')] [OutputType([pscustomobject])] param ( @@ -1723,7 +1866,6 @@ function Get-NetboxDCIMSite { } } - #endregion #region File Get-NetboxHostname.ps1 @@ -1810,7 +1952,7 @@ function Get-NetboxIPAMAddress { [object]$Family, [Parameter(ParameterSetName = 'Query')] - [uint32]$Parent, + [string]$Parent, [Parameter(ParameterSetName = 'Query')] [byte]$Mask_Length, @@ -1890,19 +2032,6 @@ function Get-NetboxIPAMAddress { #region File Get-NetboxIPAMAggregate.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 11:49 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxIPAMAggregate.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Get-NetboxIPAMAggregate { [CmdletBinding(DefaultParameterSetName = 'Query')] @@ -1974,19 +2103,6 @@ function Get-NetboxIPAMAggregate { #region File Get-NetboxIPAMAvailableIP.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 11:50 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxIPAMAvailableIP.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Get-NetboxIPAMAvailableIP { <# @@ -2052,19 +2168,6 @@ function Get-NetboxIPAMAvailableIP { #region File Get-NetboxIPAMPrefix.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 11:51 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxIPAMPrefix.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Get-NetboxIPAMPrefix { <# @@ -2363,22 +2466,9 @@ function Get-NetboxIPAMRole { #region File Get-NetboxIPAMVLAN.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/16/2020 16:34 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxIPAMVLAN.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Get-NetboxIPAMVLAN { - [CmdletBinding()] + [CmdletBinding(DefaultParameterSetName = 'Query')] param ( [Parameter(ParameterSetName = 'Query', @@ -2439,11 +2529,7 @@ function Get-NetboxIPAMVLAN { [switch]$Raw ) - - # if ($null -ne $Status) { - # $PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -VLANStatus - # } - + switch ($PSCmdlet.ParameterSetName) { 'ById' { foreach ($VLAN_ID in $Id) { @@ -2481,19 +2567,6 @@ function Get-NetboxIPAMVLAN { #region File Get-NetboxTenant.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 11:56 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxTenant.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Get-NetboxTenant { <# @@ -2645,19 +2718,6 @@ function Get-NetboxVersion { #region File Get-NetboxVirtualizationCluster.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 14:10 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxVirtualizationCluster.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Get-NetboxVirtualizationCluster { <# @@ -2752,19 +2812,6 @@ function Get-NetboxVirtualizationCluster { #region File Get-NetboxVirtualizationClusterGroup.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 14:11 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxVirtualizationClusterGroup.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Get-NetboxVirtualizationClusterGroup { [CmdletBinding()] @@ -2800,19 +2847,6 @@ function Get-NetboxVirtualizationClusterGroup { #region File Get-NetboxVirtualMachine.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 12:44 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxVirtualMachine.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Get-NetboxVirtualMachine { <# @@ -2962,19 +2996,6 @@ function Get-NetboxVirtualMachine { #region File Get-NetboxVirtualMachineInterface.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 12:47 - Created by: Claussen - Organization: NEOnet - Filename: Get-NetboxVirtualMachineInterface.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Get-NetboxVirtualMachineInterface { <# @@ -3063,19 +3084,6 @@ function Get-NetboxVirtualMachineInterface { #region File InvokeNetboxRequest.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/26/2020 14:24 - Created by: Claussen - Organization: NEOnet - Filename: InvokeNetboxRequest.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function InvokeNetboxRequest { [CmdletBinding()] @@ -3175,20 +3183,6 @@ function InvokeNetboxRequest { #region File New-NetboxCircuit.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181 - Created on: 2020-11-04 11:48 - Created by: Claussen - Organization: NEOnet - Filename: New-NetboxCircuit.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - - function New-NetboxCircuit { [CmdletBinding(ConfirmImpact = 'Low', @@ -3247,20 +3241,300 @@ function New-NetboxCircuit { #endregion -#region File New-NetboxDCIMDevice.ps1 +#region File New-NetboxContact.ps1 + +function New-NetboxContact { <# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:08 - Created by: Claussen - Organization: NEOnet - Filename: New-NetboxDCIMDevice.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. + .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])] + param + ( + [Parameter(Mandatory = $true, + 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 + } + } +} + + + + + +#endregion + +#region File New-NetboxContactAssignment.ps1 + + +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])] + param + ( + [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 = @{ + 10 = "circuits.circuit" + 7 = "circuits.provider" + 19 = "dcim.device" + 25 = "dcim.location" + 29 = "dcim.manufacturer" + 77 = "dcim.powerpanel" + 20 = "dcim.rack" + 30 = "dcim.region" + 18 = "dcim.site" + 92 = "dcim.sitegroup" + 58 = "tenancy.tenant" + 63 = "virtualization.cluster" + 64 = "virtualization.clustergroup" + 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 { + $_.Value -eq $Content_Type + }).Key + } elseif ($Content_Type -is [int]) { + if ($Content_Type -notin $($AllowedContentTypes).Keys) { + throw "Invalid content type defined" + } + } 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 + } + } +} + + + + + +#endregion + +#region File New-NetboxContactRole.ps1 + + +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])] + param + ( + [Parameter(Mandatory = $true, + 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 + } + } +} + + + + + +#endregion + +#region File New-NetboxDCIMDevice.ps1 function New-NetboxDCIMDevice { @@ -3345,22 +3619,100 @@ function New-NetboxDCIMDevice { #endregion -#region File New-NetboxIPAMAddress.ps1 +#region File New-NetboxDCIMSite.ps1 <# .NOTES =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 11:51 + Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181 + Created on: 2020-10-02 15:52 Created by: Claussen Organization: NEOnet - Filename: New-NetboxIPAMAddress.ps1 + Filename: New-NetboxDCIMSite.ps1 =========================================================================== .DESCRIPTION A description of the file. #> + +function New-NetboxDCIMSite { + <# + .SYNOPSIS + Create a new Site to Netbox + + .DESCRIPTION + Create a new Site to Netbox + + .EXAMPLE + New-NetboxDCIMSite -name MySite + + Add new Site MySite on Netbox + + #> + + [CmdletBinding(ConfirmImpact = 'Low', + SupportsShouldProcess = $true)] + [OutputType([pscustomobject])] + param + ( + [Parameter(Mandatory = $true)] + [string]$Name, + + [string]$Slug, + + [string]$Facility, + + [uint32]$ASN, + + [decimal]$Latitude, + + [decimal]$Longitude, + + [string]$Contact_Name, + + [string]$Contact_Phone, + + [string]$Contact_Email, + + [int]$Tenant_Group, + + [int]$Tenant, + + [string]$Status, + + [uint32]$Region, + + [string]$Description, + + [string]$Comments, + + [switch]$Raw + ) + + process { + $Segments = [System.Collections.ArrayList]::new(@('dcim', 'sites')) + $Method = 'POST' + + if (-not $PSBoundParameters.ContainsKey('slug')) { + $PSBoundParameters.Add('slug', $name) + } + + $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters + + $URI = BuildNewURI -Segments $URIComponents.Segments + + if ($PSCmdlet.ShouldProcess($name, 'Create new Site')) { + InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw + } + } +} + +#endregion + +#region File New-NetboxIPAMAddress.ps1 + + function New-NetboxIPAMAddress { <# .SYNOPSIS @@ -3475,19 +3827,6 @@ function New-NetboxIPAMAddress { #region File New-NetboxIPAMPrefix.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 11:52 - Created by: Claussen - Organization: NEOnet - Filename: New-NetboxIPAMPrefix.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function New-NetboxIPAMPrefix { [CmdletBinding(ConfirmImpact = 'low', @@ -3628,20 +3967,83 @@ function New-NetboxIPAMVLAN { #endregion -#region File New-NetboxVirtualMachine.ps1 +#region File New-NetboxTenant.ps1 + +function New-NetboxTenant { <# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 12:44 - Created by: Claussen - Organization: NEOnet - Filename: New-NetboxVirtualMachine.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. + .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])] + param + ( + [Parameter(Mandatory = $true, + 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 + } + } +} + + + + + +#endregion + +#region File New-NetboxVirtualMachine.ps1 function New-NetboxVirtualMachine { @@ -3654,6 +4056,8 @@ function New-NetboxVirtualMachine { [string]$Name, [Parameter(Mandatory = $true)] + [uint16]$Site, + [uint16]$Cluster, [uint16]$Tenant, @@ -3688,6 +4092,10 @@ function New-NetboxVirtualMachine { #$PSBoundParameters.Status = ValidateVirtualizationChoice -ProvidedValue $Status -VirtualMachineStatus + if ($PSBoundParameters.ContainsKey('Cluster') -and (-not $PSBoundParameters.ContainsKey('Site'))) { + throw "You must specify a site ID with a cluster ID" + } + $Segments = [System.Collections.ArrayList]::new(@('virtualization', 'virtual-machines')) $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters @@ -3707,19 +4115,6 @@ function New-NetboxVirtualMachine { #region File Remove-NetboxDCIMDevice.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:08 - Created by: Claussen - Organization: NEOnet - Filename: Remove-NetboxDCIMDevice.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Remove-NetboxDCIMDevice { <# @@ -3780,19 +4175,6 @@ function Remove-NetboxDCIMDevice { #region File Remove-NetboxDCIMInterface.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:11 - Created by: Claussen - Organization: NEOnet - Filename: Remove-NetboxDCIMInterface.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Remove-NetboxDCIMInterface { <# @@ -3853,19 +4235,6 @@ function Remove-NetboxDCIMInterface { #region File Remove-NetboxDCIMInterfaceConnection.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:12 - Created by: Claussen - Organization: NEOnet - Filename: Remove-NetboxDCIMInterfaceConnection.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Remove-NetboxDCIMInterfaceConnection { [CmdletBinding(ConfirmImpact = 'High', @@ -3907,21 +4276,78 @@ function Remove-NetboxDCIMInterfaceConnection { #endregion -#region File Remove-NetboxIPAMAddress.ps1 +#region File Remove-NetboxDCIMSite.ps1 <# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 11:52 - Created by: Claussen - Organization: NEOnet - Filename: Remove-NetboxIPAMAddress.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. + .NOTES + =========================================================================== + Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181 + Created on: 2020-10-02 15:52 + Created by: Claussen + Organization: NEOnet + Filename: New-NetboxDCIMSite.ps1 + =========================================================================== + .DESCRIPTION + A description of the file. #> + +function Remove-NetboxDCIMSite { + <# + .SYNOPSIS + Remove a Site + + .DESCRIPTION + Remove a DCIM Site from Netbox + + .EXAMPLE + Remove-NetboxDCIMSite -Id 1 + + Remove DCM Site with id 1 + + .EXAMPLE + Get-NetboxDCIMSite -name My Site | Remove-NetboxDCIMSite -confirm:$false + + Remove DCM Site with name My Site without confirmation + + #> + + [CmdletBinding(ConfirmImpact = 'High', + SupportsShouldProcess = $true)] + param + ( + [Parameter(Mandatory = $true, + ValueFromPipelineByPropertyName = $true)] + [uint]$Id + + ) + + begin { + + } + + process { + $CurrentSite = Get-NetboxDCIMSite -Id $Id -ErrorAction Stop + + if ($pscmdlet.ShouldProcess("$($CurrentSite.Name)/$($CurrentSite.Id)", "Remove Site")) { + $Segments = [System.Collections.ArrayList]::new(@('dcim', 'sites', $CurrentSite.Id)) + + $URI = BuildNewURI -Segments $Segments + + InvokeNetboxRequest -URI $URI -Method DELETE + } + } + + end { + + } +} + +#endregion + +#region File Remove-NetboxIPAMAddress.ps1 + + function Remove-NetboxIPAMAddress { <# .SYNOPSIS @@ -3973,19 +4399,6 @@ function Remove-NetboxIPAMAddress { #region File Remove-NetboxVirtualMachine.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 12:45 - Created by: Claussen - Organization: NEOnet - Filename: Remove-NetboxVirtualMachine.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Remove-NetboxVirtualMachine { <# @@ -4055,6 +4468,131 @@ Function Set-NetboxCipherSSL { } +#endregion + +#region File Set-NetboxContact.ps1 + + +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])] + param + ( + [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 + } + } + } +} + + + + + #endregion #region File Set-NetboxCredential.ps1 @@ -4096,19 +4634,6 @@ function Set-NetboxCredential { #region File Set-NetboxDCIMDevice.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:08 - Created by: Claussen - Organization: NEOnet - Filename: Set-NetboxDCIMDevice.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Set-NetboxDCIMDevice { [CmdletBinding(SupportsShouldProcess = $true)] @@ -4196,19 +4721,6 @@ function Set-NetboxDCIMDevice { #region File Set-NetboxDCIMInterface.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:11 - Created by: Claussen - Organization: NEOnet - Filename: Set-NetboxDCIMInterface.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Set-NetboxDCIMInterface { [CmdletBinding(ConfirmImpact = 'Medium', @@ -4302,19 +4814,6 @@ function Set-NetboxDCIMInterface { #region File Set-NetboxDCIMInterfaceConnection.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/23/2020 12:11 - Created by: Claussen - Organization: NEOnet - Filename: Set-NetboxDCIMInterfaceConnection.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Set-NetboxDCIMInterfaceConnection { <# @@ -4483,19 +4982,6 @@ function Set-NetboxInvokeParams { #region File Set-NetboxIPAMAddress.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 11:53 - Created by: Claussen - Organization: NEOnet - Filename: Set-NetboxIPAMAddress.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Set-NetboxIPAMAddress { [CmdletBinding(ConfirmImpact = 'Medium', @@ -4584,19 +5070,6 @@ function Set-NetboxIPAMAddress { #region File Set-NetboxIPAMPrefix.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2021 v5.8.186 - Created on: 2021-03-23 13:54 - Created by: Claussen - Organization: NEOnet - Filename: Set-NetboxIPAMPrefix.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Set-NetboxIPAMPrefix { [CmdletBinding(ConfirmImpact = 'Medium', @@ -4727,19 +5200,6 @@ Function Set-NetboxUntrustedSSL { #region File Set-NetboxVirtualMachine.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 12:45 - Created by: Claussen - Organization: NEOnet - Filename: Set-NetboxVirtualMachine.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Set-NetboxVirtualMachine { [CmdletBinding(ConfirmImpact = 'Medium', @@ -4806,19 +5266,6 @@ function Set-NetboxVirtualMachine { #region File Set-NetboxVirtualMachineInterface.ps1 -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Created on: 3/19/2020 12:47 - Created by: Claussen - Organization: NEOnet - Filename: Set-NetboxVirtualMachineInterface.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - function Set-NetboxVirtualMachineInterface { [CmdletBinding(ConfirmImpact = 'Medium', @@ -4891,6 +5338,7 @@ function SetupNetboxConfigVariable { 'Choices' = @{ } 'APIDefinition' = $null + 'ContentTypes' = $null } } @@ -4943,18 +5391,6 @@ function VerifyAPIConnectivity { #endregion -<# - .NOTES - -------------------------------------------------------------------------------- - Code generated by: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 - Generated on: 3/26/2020 15:16 - Generated by: Claussen - Organization: NEOnet - -------------------------------------------------------------------------------- - .DESCRIPTION - Script generated by PowerShell Studio 2020 -#> - # Build a list of common parameters so we can omit them to build URI parameters $script:CommonParameterNames = New-Object System.Collections.ArrayList [void]$script:CommonParameterNames.AddRange(@([System.Management.Automation.PSCmdlet]::CommonParameters)) @@ -4962,6 +5398,3 @@ $script:CommonParameterNames = New-Object System.Collections.ArrayList [void]$script:CommonParameterNames.Add('Raw') SetupNetboxConfigVariable - -Export-ModuleMember -Function * -#Export-ModuleMember -Function *-* diff --git a/README.md b/README.md index 5763fc1..a29827e 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,46 @@ This module is a wrapper for the [Netbox](https://github.com/netbox-community/ne 2. Import module 3. Connect to an API endpoint by using `Connect-NetboxAPI -Hostname netbox.example.com` +## Basic Commands + +```powershell +#Just adding a new IP +New-NetboxIPAMAddress -Address 10.0.0.1/24 -Dns_name this.is.thedns.fqdn -Custom_Fields @{CustomFieldID="CustomFieldContent"} -Tenant 1 -Description "Description" + +#Creating a new VM, add an interface and assign Interface IP +function New-NBVirtualMachine +{ + [CmdletBinding()] + [Alias()] + [OutputType([int])] + Param + ( + [string]$Name, + [string]$Cluster, + [string]$IP, + [string]$tenant, + [string]$VMNICName + ) + + Begin + { + $NBCluster = Get-NetboxVirtualizationCluster -name $Cluster + $NBTenant = Get-NetboxTenant -Name $tenant + } + Process + { + $vm = New-NetboxVirtualMachine -Name $Name -Cluster $NBCluster.id -Tenant $NBtenant.id + $interface = Add-NetboxVirtualMachineInterface -Name $VMNICName -Virtual_Machine $vm.id + + + $NBip = New-NetboxIPAMAddress -Address $IP -Tenant $NBtenant.id + Set-NetboxIPAMAddress -Assigned_Object_Type virtualization.vminterface -Assigned_Object_Id $interface.id -id $NBip.id + Set-NetboxVirtualMachine -Primary_IP4 $NBip.id -Id $vm.id + } +} + +``` + # Notes I started this project years ago with Powershell Studio using the built in deployment methods, learning Git, and learning PS best practices. So please forgive any "obvious" mistakes 😅 Over time I have had to adjust my methods for deployment... change the design of functions, and refactor code as I learn new and better things. diff --git a/Tests/.gitignore b/Tests/.gitignore new file mode 100644 index 0000000..c6e1f89 --- /dev/null +++ b/Tests/.gitignore @@ -0,0 +1 @@ +credential.ps1 \ No newline at end of file diff --git a/Tests/DCIM.Devices.Tests.ps1 b/Tests/DCIM.Devices.Tests.ps1 index 5af9b8e..d8164bd 100644 --- a/Tests/DCIM.Devices.Tests.ps1 +++ b/Tests/DCIM.Devices.Tests.ps1 @@ -1,16 +1,8 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.152 - Created on: 5/22/2018 4:48 PM - Created by: Ben Claussen - Organization: NEOnet - Filename: DCIM.Tests.ps1 - =========================================================================== - .DESCRIPTION - DCIM tests. -#> - + +[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingConvertToSecureStringWithPlainText", "")] +param +( +) Import-Module Pester Remove-Module NetboxPS -Force -ErrorAction SilentlyContinue @@ -28,12 +20,12 @@ Describe -Name "DCIM Devices Tests" -Tag 'DCIM', 'Devices' -Fixture { Mock -CommandName 'Invoke-RestMethod' -Verifiable -ModuleName 'NetboxPS' -MockWith { # Return a hashtable of the items we would normally pass to Invoke-RestMethod return [ordered]@{ - 'Method' = $Method - 'Uri' = $Uri - 'Headers' = $Headers - 'Timeout' = $Timeout + 'Method' = $Method + 'Uri' = $Uri + 'Headers' = $Headers + 'Timeout' = $Timeout 'ContentType' = $ContentType - 'Body' = $Body + 'Body' = $Body } } @@ -363,7 +355,7 @@ Describe -Name "DCIM Devices Tests" -Tag 'DCIM', 'Devices' -Fixture { Mock -CommandName "Get-NetboxDCIMDevice" -ModuleName NetboxPS -MockWith { return [pscustomobject]@{ - 'Id' = $Id + 'Id' = $Id 'Name' = $Name } } diff --git a/Tests/DCIM.Interfaces.Tests.ps1 b/Tests/DCIM.Interfaces.Tests.ps1 index 5499ce7..e45572f 100644 --- a/Tests/DCIM.Interfaces.Tests.ps1 +++ b/Tests/DCIM.Interfaces.Tests.ps1 @@ -1,16 +1,8 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.152 - Created on: 5/24/2018 10:50 AM - Created by: Ben Claussen - Organization: NEOnet - Filename: DCIM.Interfaces.Tests.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - + +[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingConvertToSecureStringWithPlainText", "")] +param +( +) Import-Module Pester Remove-Module NetboxPS -Force -ErrorAction SilentlyContinue @@ -28,12 +20,12 @@ Describe -Name "DCIM Interfaces Tests" -Tag 'DCIM', 'Interfaces' -Fixture { Mock -CommandName 'Invoke-RestMethod' -Verifiable -ModuleName 'NetboxPS' -MockWith { # Return a hashtable of the items we would normally pass to Invoke-RestMethod return [ordered]@{ - 'Method' = $Method - 'Uri' = $Uri - 'Headers' = $Headers - 'Timeout' = $Timeout + 'Method' = $Method + 'Uri' = $Uri + 'Headers' = $Headers + 'Timeout' = $Timeout 'ContentType' = $ContentType - 'Body' = $Body + 'Body' = $Body } } @@ -139,13 +131,13 @@ Describe -Name "DCIM Interfaces Tests" -Tag 'DCIM', 'Interfaces' -Fixture { It "Should add an interface to a device with lots of properties" { $paramAddNetboxDCIMInterface = @{ - Device = 123 - Name = "TestInterface" + Device = 123 + Name = "TestInterface" Form_Factor = '10GBASE-T (10GE)' - MTU = 9000 - MGMT_Only = $true + MTU = 9000 + MGMT_Only = $true Description = 'Test Description' - Mode = 'Access' + Mode = 'Access' } $Result = Add-NetboxDCIMInterface @paramAddNetboxDCIMInterface diff --git a/Tests/DCIM.Platforms.Tests.ps1 b/Tests/DCIM.Platforms.Tests.ps1 index 7d2853a..d335995 100644 --- a/Tests/DCIM.Platforms.Tests.ps1 +++ b/Tests/DCIM.Platforms.Tests.ps1 @@ -1,16 +1,8 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.152 - Created on: 5/25/2018 1:03 PM - Created by: Ben Claussen - Organization: NEOnet - Filename: DCIM.Platforms.Tests.ps1 - =========================================================================== - .DESCRIPTION - A description of the file. -#> - + +[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingConvertToSecureStringWithPlainText", "")] +param +( +) Import-Module Pester Remove-Module NetboxPS -Force -ErrorAction SilentlyContinue @@ -28,12 +20,12 @@ Describe -Name "DCIM Platforms Tests" -Tag 'DCIM', 'platforms' -Fixture { Mock -CommandName 'Invoke-RestMethod' -Verifiable -ModuleName 'NetboxPS' -MockWith { # Return a hashtable of the items we would normally pass to Invoke-RestMethod return [ordered]@{ - 'Method' = $Method - 'Uri' = $Uri - 'Headers' = $Headers - 'Timeout' = $Timeout + 'Method' = $Method + 'Uri' = $Uri + 'Headers' = $Headers + 'Timeout' = $Timeout 'ContentType' = $ContentType - 'Body' = $Body + 'Body' = $Body } } diff --git a/Tests/Helpers.Tests.ps1 b/Tests/Helpers.Tests.ps1 index 594209d..3c34aaa 100644 --- a/Tests/Helpers.Tests.ps1 +++ b/Tests/Helpers.Tests.ps1 @@ -1,16 +1,8 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.150 - Created on: 5/8/2018 11:36 AM - Created by: Ben Claussen - Organization: NEOnet - Filename: Helpers.Tests.ps1 - =========================================================================== - .DESCRIPTION - Helper functions Pester tests -#> - + +[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingConvertToSecureStringWithPlainText", "")] +param +( +) Import-Module Pester Remove-Module NetboxPS -Force -ErrorAction SilentlyContinue @@ -88,7 +80,7 @@ Describe "Helpers tests" -Tag 'Core', 'Helpers' -Fixture { Context -Name "Building URI components" -Fixture { It "Should give a basic hashtable" { - $URIComponents = BuildURIComponents -URISegments @('segment1', 'segment2') -ParametersDictionary @{'param1' = 1} + $URIComponents = BuildURIComponents -URISegments @('segment1', 'segment2') -ParametersDictionary @{'param1' = 1 } $URIComponents | Should -BeOfType [hashtable] $URIComponents.Keys.Count | Should -BeExactly 2 @@ -100,7 +92,7 @@ Describe "Helpers tests" -Tag 'Core', 'Helpers' -Fixture { } It "Should add a single ID parameter to the segments" { - $URIComponents = BuildURIComponents -URISegments @('segment1', 'segment2') -ParametersDictionary @{'id' = 123} + $URIComponents = BuildURIComponents -URISegments @('segment1', 'segment2') -ParametersDictionary @{'id' = 123 } $URIComponents | Should -BeOfType [hashtable] $URIComponents.Keys.Count | Should -BeExactly 2 @@ -111,7 +103,7 @@ Describe "Helpers tests" -Tag 'Core', 'Helpers' -Fixture { } It "Should add multiple IDs to the parameters id__in" { - $URIComponents = BuildURIComponents -URISegments @('segment1', 'segment2') -ParametersDictionary @{'id' = "123", "456"} + $URIComponents = BuildURIComponents -URISegments @('segment1', 'segment2') -ParametersDictionary @{'id' = "123", "456" } $URIComponents | Should -BeOfType [hashtable] $URIComponents.Keys.Count | Should -BeExactly 2 @@ -123,7 +115,7 @@ Describe "Helpers tests" -Tag 'Core', 'Helpers' -Fixture { } It "Should skip a particular parameter name" { - $URIComponents = BuildURIComponents -URISegments @('segment1', 'segment2') -ParametersDictionary @{'param1' = 1; 'param2' = 2} -SkipParameterByName 'param2' + $URIComponents = BuildURIComponents -URISegments @('segment1', 'segment2') -ParametersDictionary @{'param1' = 1; 'param2' = 2 } -SkipParameterByName 'param2' $URIComponents | Should -BeOfType [hashtable] $URIComponents.Keys.Count | Should -BeExactly 2 @@ -136,7 +128,7 @@ Describe "Helpers tests" -Tag 'Core', 'Helpers' -Fixture { } It "Should add a query (q) parameter" { - $URIComponents = BuildURIComponents -URISegments @('segment1', 'segment2') -ParametersDictionary @{'query' = 'mytestquery'} + $URIComponents = BuildURIComponents -URISegments @('segment1', 'segment2') -ParametersDictionary @{'query' = 'mytestquery' } $URIComponents | Should -BeOfType [hashtable] $URIComponents.Keys.Count | Should -BeExactly 2 @@ -150,7 +142,7 @@ Describe "Helpers tests" -Tag 'Core', 'Helpers' -Fixture { It "Should generate custom field parameters" { $URIComponents = BuildURIComponents -URISegments @('segment1', 'segment2') -ParametersDictionary @{ 'CustomFields' = @{ - 'PRTG_Id' = 1234 + 'PRTG_Id' = 1234 'Customer_Id' = 'abc' } } @@ -170,13 +162,13 @@ Describe "Helpers tests" -Tag 'Core', 'Helpers' -Fixture { Mock -CommandName 'Invoke-RestMethod' -Verifiable -MockWith { # Return an object of the items we would normally pass to Invoke-RestMethod return [pscustomobject]@{ - 'Method' = $Method - 'Uri' = $Uri - 'Headers' = $Headers - 'Timeout' = $Timeout + 'Method' = $Method + 'Uri' = $Uri + 'Headers' = $Headers + 'Timeout' = $Timeout 'ContentType' = $ContentType - 'Body' = $Body - 'results' = 'Only results' + 'Body' = $Body + 'results' = 'Only results' } } diff --git a/Tests/IPAM.Tests.ps1 b/Tests/IPAM.Tests.ps1 index 6b214e9..92906f1 100644 --- a/Tests/IPAM.Tests.ps1 +++ b/Tests/IPAM.Tests.ps1 @@ -1,16 +1,8 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.150 - Created on: 5/10/2018 3:41 PM - Created by: Ben Claussen - Organization: NEOnet - Filename: IPAM.Tests.ps1 - =========================================================================== - .DESCRIPTION - IPAM Pester tests -#> - + +[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingConvertToSecureStringWithPlainText", "")] +param +( +) Import-Module Pester Remove-Module NetboxPS -Force -ErrorAction SilentlyContinue @@ -29,12 +21,12 @@ Describe -Name "IPAM tests" -Tag 'Ipam' -Fixture { Mock -CommandName 'Invoke-RestMethod' -Verifiable -ModuleName 'NetboxPS' -MockWith { # Return a hashtable of the items we would normally pass to Invoke-RestMethod return [ordered]@{ - 'Method' = $Method - 'Uri' = $Uri - 'Headers' = $Headers - 'Timeout' = $Timeout + 'Method' = $Method + 'Uri' = $Uri + 'Headers' = $Headers + 'Timeout' = $Timeout 'ContentType' = $ContentType - 'Body' = $Body + 'Body' = $Body } } @@ -422,7 +414,7 @@ Describe -Name "IPAM tests" -Tag 'Ipam' -Fixture { Mock -CommandName "Get-NetboxIPAMAddress" -ModuleName NetboxPS -MockWith { return @{ 'address' = "10.1.1.1/$Id" - 'id' = $id + 'id' = $id } } @@ -486,7 +478,7 @@ Describe -Name "IPAM tests" -Tag 'Ipam' -Fixture { Mock -CommandName "Get-NetboxIPAMAddress" -ModuleName NetboxPS -MockWith { return @{ 'address' = '10.1.1.1/24' - 'id' = $id + 'id' = $id } } diff --git a/Tests/Setup.Tests.ps1 b/Tests/Setup.Tests.ps1 index dda6465..de06170 100644 --- a/Tests/Setup.Tests.ps1 +++ b/Tests/Setup.Tests.ps1 @@ -1,16 +1,8 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.150 - Created on: 5/8/2018 10:33 AM - Created by: Ben Claussen - Organization: NEOnet - Filename: Setup.Tests.ps1 - =========================================================================== - .DESCRIPTION - Setup function Pester tests -#> - + +[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingConvertToSecureStringWithPlainText", "")] +param +( +) Import-Module Pester Remove-Module NetboxPS -Force -ErrorAction SilentlyContinue @@ -43,7 +35,7 @@ Describe "Setup tests" -Tag 'Core', 'Setup' -Fixture { } It "Checks the set credentials" { - $Creds = Set-NetboxCredential -Token (ConvertTo-SecureString -String "faketoken" -Force -AsPlainText) + Set-NetboxCredential -Token (ConvertTo-SecureString -String "faketoken" -Force -AsPlainText) (Get-NetboxCredential).GetNetworkCredential().Password | Should -BeExactly "faketoken" } } diff --git a/Tests/Virtualization.Tests.ps1 b/Tests/Virtualization.Tests.ps1 index 0eb2682..ed3175b 100644 --- a/Tests/Virtualization.Tests.ps1 +++ b/Tests/Virtualization.Tests.ps1 @@ -1,16 +1,8 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.150 - Created on: 5/8/2018 4:01 PM - Created by: Ben Claussen - Organization: NEOnet - Filename: Virtualization.Tests.ps1 - =========================================================================== - .DESCRIPTION - Virtualization Pester tests -#> - + +[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingConvertToSecureStringWithPlainText", "")] +param +( +) Import-Module Pester Remove-Module NetboxPS -Force -ErrorAction SilentlyContinue @@ -28,12 +20,12 @@ Describe -Name "Virtualization tests" -Tag 'Virtualization' -Fixture { Mock -CommandName 'Invoke-RestMethod' -Verifiable -ModuleName 'NetboxPS' -MockWith { # Return a hashtable of the items we would normally pass to Invoke-RestMethod return [ordered]@{ - 'Method' = $Method - 'Uri' = $Uri - 'Headers' = $Headers - 'Timeout' = $Timeout + 'Method' = $Method + 'Uri' = $Uri + 'Headers' = $Headers + 'Timeout' = $Timeout 'ContentType' = $ContentType - 'Body' = $Body + 'Body' = $Body } } @@ -365,7 +357,7 @@ Describe -Name "Virtualization tests" -Tag 'Virtualization' -Fixture { Mock -CommandName "Get-NetboxVirtualMachine" -ModuleName NetboxPS -MockWith { return [pscustomobject]@{ - 'Id' = $Id + 'Id' = $Id 'Name' = $Name } } @@ -406,7 +398,7 @@ Describe -Name "Virtualization tests" -Tag 'Virtualization' -Fixture { Mock -CommandName "Get-NetboxVirtualMachineInterface" -ModuleName NetboxPS -MockWith { return [pscustomobject]@{ - 'Id' = $Id + 'Id' = $Id 'Name' = $Name } } @@ -426,12 +418,12 @@ Describe -Name "Virtualization tests" -Tag 'Virtualization' -Fixture { It "Should set an interface to a new name, MTU, MAC address and description" { $paramSetNetboxVirtualMachineInterface = @{ - Id = 1234 - Name = 'newtestname' + Id = 1234 + Name = 'newtestname' MAC_Address = '11:22:33:44:55:66' - MTU = 9000 + MTU = 9000 Description = "Test description" - Force = $true + Force = $true } $Result = Set-NetboxVirtualMachineInterface @paramSetNetboxVirtualMachineInterface diff --git a/Tests/common.ps1 b/Tests/common.ps1 new file mode 100644 index 0000000..116dc24 --- /dev/null +++ b/Tests/common.ps1 @@ -0,0 +1,19 @@ +# +# Copyright 2021, Alexis La Goutte +# +# SPDX-License-Identifier: Apache-2.0 +# +[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingConvertToSecureStringWithPlainText", "")] +Param() + +$script:pester_site1 = "pester_site1" + +$Credential = New-Object System.Management.Automation.PSCredential("username", (ConvertTo-SecureString $token -AsPlainText -Force)) +$script:invokeParams = @{ + hostname = $hostname; + Credential = $Credential; + SkipCertificateCheck = $true; +} + +. ../credential.ps1 +#TODO: Add check if no ipaddress/token info... \ No newline at end of file diff --git a/Tests/credential.example.ps1 b/Tests/credential.example.ps1 new file mode 100644 index 0000000..81c7adc --- /dev/null +++ b/Tests/credential.example.ps1 @@ -0,0 +1,13 @@ +# +# Copyright 2021, Alexis La Goutte +# +# SPDX-License-Identifier: Apache-2.0 +# + +# Copy this file to credential.ps1 (on Tests folder) and change connection settings.. + +$script:hostname = "10.44.23.213" +$script:token = "aaaaaaaaaaaaaaaaaa" + +#Uncomment if you want to personnalize some setting +#script:pester_site1 = "pester_site1" diff --git a/Tests/integration/DCIM.Site.Tests.ps1 b/Tests/integration/DCIM.Site.Tests.ps1 new file mode 100644 index 0000000..295188d --- /dev/null +++ b/Tests/integration/DCIM.Site.Tests.ps1 @@ -0,0 +1,85 @@ +# +# Copyright 2021, Alexis La Goutte +# +# SPDX-License-Identifier: Apache-2.0 +# +. ../common.ps1 + +BeforeAll { + Connect-NetboxAPI @invokeParams +} + +Describe "Get (DCIM) Site" { + + BeforeAll { + New-NetboxDCIMSite -name $pester_site1 + } + + It "Get Site Does not throw an error" { + { + Get-NetboxDCIMSite + } | Should -Not -Throw + } + + It "Get ALL Site" { + $site = Get-NetboxDCIMSite + $site.count | Should -Not -Be $NULL + } + + It "Get Site ($pester_site1)" { + $site = Get-NetboxDCIMSite | Where-Object { $_.name -eq $pester_site1 } + $site.id | Should -Not -BeNullOrEmpty + $site.name | Should -Be $pester_site1 + $site.status.value | Should -Be "active" + } + + It "Search Site by name ($pester_site1)" { + $site = Get-NetboxDCIMSite -name $pester_site1 + @($site).count | Should -Be 1 + $site.id | Should -Not -BeNullOrEmpty + $site.name | Should -Be $pester_site1 + } + + AfterAll { + Get-NetboxDCIMSite -name $pester_site1 | Remove-NetboxDCIMSite -confirm:$false + } +} + +Describe "New (DCIM) Site" { + + It "New Site with no option" { + New-NetboxDCIMSite -name $pester_site1 + $site = Get-NetboxDCIMSite -name $pester_site1 + $site.id | Should -Not -BeNullOrEmpty + $site.name | Should -Be $pester_site1 + $site.slug | Should -Be $pester_site1 + } + + It "New Site with different slug" { + New-NetboxDCIMSite -name $pester_site1 -slug pester_slug + $site = Get-NetboxDCIMSite -name $pester_site1 + $site.id | Should -Not -BeNullOrEmpty + $site.name | Should -Be $pester_site1 + $site.slug | Should -Be "pester_slug" + } + + AfterEach { + Get-NetboxDCIMSite -name $pester_site1 | Remove-NetboxDCIMSite -confirm:$false + } +} + +Describe "Remove Site" { + + BeforeEach { + New-NetboxDCIMSite -name $pester_site1 + } + + It "Remove Site" { + $site = Get-NetboxDCIMSite -name $pester_site1 + Remove-NetboxDCIMSite -id $site.id -confirm:$false + $site = Get-NetboxDCIMSite -name $pester_site1 + $site | Should -BeNullOrEmpty + @($site).count | Should -Be 0 + } + +} \ No newline at end of file diff --git a/deploy.ps1 b/deploy.ps1 index 5a0a379..eef3a5e 100644 --- a/deploy.ps1 +++ b/deploy.ps1 @@ -1,7 +1,7 @@ <# .SYNOPSIS Concatenate files into single PSM1 and PSD1 files - + .DESCRIPTION Concatenate all ps1 files in the Functions directory, plus the root PSM1, into a single PSM1 file in the NetboxPS directory. @@ -13,10 +13,16 @@ .PARAMETER VersionIncrease Increase the version by a user defined amount - + .PARAMETER NewVersion Override the new version with this version + .PARAMETER Environment + A description of the Environment parameter. + + .PARAMETER ResetCurrentEnvironment + A description of the ResetCurrentEnvironment parameter. + .EXAMPLE Use all defaults and concatenate all files @@ -26,33 +32,31 @@ Increment the version by 0.2.0. Given version 1.2.0, the resulting version will be 1.4.0 .\deploy.ps1 -VersionIncrease 0.2.0 - - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.174 - Created on: 4/9/2020 09:43 - Created by: Claussen - Organization: NEOnet - Filename: deploy.ps1 - =========================================================================== #> [CmdletBinding(DefaultParameterSetName = 'IncreaseVersion')] +[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingWriteHost", "")] +[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSReviewUnusedParameter", "")] param ( [Parameter(ParameterSetName = 'SkipVersion')] [switch]$SkipVersion, - + [Parameter(ParameterSetName = 'IncreaseVersion')] [version]$VersionIncrease = "0.0.1", - + [Parameter(ParameterSetName = 'SetVersion')] - [version]$NewVersion + [version]$NewVersion, + + [ValidateSet('dev', 'development', 'prod', 'production', IgnoreCase = $true)] + [string]$Environment = 'development', + [switch]$ResetCurrentEnvironment ) -Import-Module "Microsoft.PowerShell.Utility" -ErrorAction Stop Write-Host "Beginning deployment" -ForegroundColor Green +Write-Host "Importing required modules" -ForegroundColor Green +Import-Module "Microsoft.PowerShell.Utility" -ErrorAction Stop $ModuleName = 'NetboxPS' $ConcatenatedFilePath = "$PSScriptRoot\concatenated.ps1" $FunctionPath = "$PSScriptRoot\Functions" @@ -60,22 +64,22 @@ $OutputDirectory = "$PSScriptRoot\$ModuleName" $PSD1OutputPath = "$OutputDirectory\$ModuleName.psd1" $PSM1OutputPath = "$OutputDirectory\$ModuleName.psm1" -$PS1Files = Get-ChildItem $FunctionPath -Filter "*.ps1" -Recurse | Sort-Object Name +$PS1FunctionFiles = Get-ChildItem $FunctionPath -Filter "*.ps1" -Recurse | Sort-Object Name "" | Out-File -FilePath $ConcatenatedFilePath -Encoding utf8 $Counter = 0 -Write-Host "Concatenating [$($PS1Files.Count)] PS1 files from $FunctionPath" -foreach ($File in $PS1Files) { +Write-Host "Concatenating [$($PS1FunctionFiles.Count)] PS1 files from $FunctionPath" +foreach ($File in $PS1FunctionFiles) { $Counter++ - + try { - Write-Host (" Adding file {0:D2}/{1:D2}: $($File.Name)" -f $Counter, $PS1Files.Count) - + Write-Host (" Adding file {0:D2}/{1:D2}: $($File.Name)" -f $Counter, $PS1FunctionFiles.Count) + "`r`n#region File $($File.Name)`r`n" | Out-File -FilePath $ConcatenatedFilePath -Encoding utf8 -Append -ErrorAction Stop - + Get-Content $File.FullName -Encoding UTF8 -ErrorAction Stop | Out-File -FilePath $ConcatenatedFilePath -Encoding utf8 -Append -ErrorAction Stop - + "`r`n#endregion" | Out-File -FilePath $ConcatenatedFilePath -Encoding utf8 -Append -ErrorAction Stop } catch { Write-Host "FAILED TO WRITE CONCATENATED FILE: $($_.Exception.Message): $($_.TargetObject)" -ForegroundColor Red @@ -85,56 +89,65 @@ foreach ($File in $PS1Files) { "" | Out-File -FilePath $ConcatenatedFilePath -Encoding utf8 -Append -Write-Host " Adding psm1" -Get-Content "$PSScriptRoot\$ModuleName.psm1" | Out-File -FilePath $ConcatenatedFilePath -Encoding UTF8 -Append - -$PSDManifest = Import-PowerShellDataFile -Path "$PSScriptRoot\$ModuleName.psd1" -# Get the version from the PSD1 -#[version]$CurrentVersion = [regex]::matches($PSDContent, "\s*ModuleVersion\s=\s'(\d*.\d*.\d*)'\s*").groups[1].value -[version]$CurrentVersion = $PSDManifest.ModuleVersion - - -switch ($PSCmdlet.ParameterSetName) { - "SkipVersion" { - # Dont do anything with the PSD - Write-Host " Skipping version update, maintaining version [$CurrentVersion]" - - break - } - - "IncreaseVersion" { - # Calculate the new version - [version]$NewVersion = "{0}.{1}.{2}" -f ($CurrentVersion.Major + $VersionIncrease.Major), ($CurrentVersion.Minor + $VersionIncrease.Minor), ($CurrentVersion.Build + $VersionIncrease.Build) - - Write-Host " Updating version in PSD1 from [$CurrentVersion] to [$NewVersion]" - - # Replace the version number in the content - #$PSDContent -replace $CurrentVersion, $NewVersion | Out-File $PSScriptRoot\$ModuleName.psd1 -Encoding UTF8 - Update-ModuleManifest -Path "$PSScriptRoot\$ModuleName.psd1" -ModuleVersion $NewVersion - - break - } - - "SetVersion" { - Write-Host " Updating version in PSD1 from [$CurrentVersion] to [$NewVersion]" - - # Replace the version number in the content - #$PSDContent -replace $CurrentVersion, $NewVersion | Out-File $PSScriptRoot\$ModuleName.psd1 -Encoding UTF8 - Update-ModuleManifest -Path "$PSScriptRoot\$ModuleName.psd1" -ModuleVersion $NewVersion - - break - } -} - - if (-not (Test-Path $OutputDirectory)) { try { Write-Warning "Creating path [$OutputDirectory]" $null = New-Item -Path $OutputDirectory -ItemType Directory -Force } catch { - throw "Failed to create directory [$OutputDirectory]: $($_.Exception.Message)" + throw "Failed to create output directory [$OutputDirectory]: $($_.Exception.Message)" } } +Write-Host " Adding psm1" +Get-Content "$PSScriptRoot\$ModuleName.psm1" | Out-File -FilePath $ConcatenatedFilePath -Encoding UTF8 -Append + +$PSDManifest = Import-PowerShellDataFile -Path "$PSScriptRoot\$ModuleName.psd1" +# Get the version from the PSD1 +[version]$CurrentVersion = $PSDManifest.ModuleVersion + +$UpdateModuleManifestSplat = @{ + Path = "$PSScriptRoot\$ModuleName.psd1" + ErrorAction = 'Stop' +} + +if ($Environment -ilike 'dev*') { + Write-Host "Exporting all functions for development" + $UpdateModuleManifestSplat['FunctionsToExport'] = $PS1FunctionFiles.BaseName +} else { + $UpdateModuleManifestSplat['FunctionsToExport'] = ($PS1FunctionFiles.BaseName | Where-Object { $_ -like '*-*' }) +} +Write-Host "Comparing versions" +switch ($PSCmdlet.ParameterSetName) { + "SkipVersion" { + # Dont do anything with the PSD + Write-Host " Skipping version update, maintaining version [$CurrentVersion]" + + break + } + + "IncreaseVersion" { + # Calculate the new version + [version]$NewVersion = "{0}.{1}.{2}" -f ($CurrentVersion.Major + $VersionIncrease.Major), ($CurrentVersion.Minor + $VersionIncrease.Minor), ($CurrentVersion.Build + $VersionIncrease.Build) + + Write-Host " Updating version from [$CurrentVersion] to [$NewVersion]" + + # Replace the version number in the content + $UpdateModuleManifestSplat['ModuleVersion'] = $NewVersion + + break + } + + "SetVersion" { + Write-Host " Updating version from [$CurrentVersion] to [$NewVersion]" + + # Replace the version number in the content + $UpdateModuleManifestSplat['ModuleVersion'] = $NewVersion + + break + } +} + +Write-Host "Updating Module Manifest" +Update-ModuleManifest @UpdateModuleManifestSplat Write-Host " Copying psd1" Copy-Item -Path "$PSScriptRoot\$ModuleName.psd1" -Destination $PSD1OutputPath -Force @@ -142,4 +155,15 @@ Copy-Item -Path "$PSScriptRoot\$ModuleName.psd1" -Destination $PSD1OutputPath -F Write-Host " Copying psm1" Copy-Item -Path $ConcatenatedFilePath -Destination $PSM1OutputPath -Force -Write-Host "Deployment complete" -ForegroundColor Green \ No newline at end of file +Write-Host "Deployment complete" -ForegroundColor Green +if ($ResetCurrentEnvironment) { + Write-Warning "Running commands to reset current environment" + if (Get-Module 'NetboxPS') { + Remove-Module NetboxPS -Force + } + + Write-Host " Reimporting module" + Import-Module $PSM1OutputPath, $PSD1OutputPath -Force -ErrorAction Stop + + Write-Host "Reset complete" -ForegroundColor Green +}