mirror of
https://github.com/benclaussen/NetboxPS.git
synced 2025-12-13 01:42:28 +00:00
428 lines
No EOL
10 KiB
PowerShell
428 lines
No EOL
10 KiB
PowerShell
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.152
|
|
Created on: 5/25/2018 2:52 PM
|
|
Created by: Ben Claussen
|
|
Organization: NEOnet
|
|
Filename: DCIM.Devices.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
#region GET commands
|
|
|
|
function Get-NetboxDCIMDevice {
|
|
[CmdletBinding()]
|
|
#region Parameters
|
|
param
|
|
(
|
|
[uint16]$Limit,
|
|
|
|
[uint16]$Offset,
|
|
|
|
[Parameter(ValueFromPipelineByPropertyName = $true)]
|
|
[uint16[]]$Id,
|
|
|
|
[string]$Query,
|
|
|
|
[string]$Name,
|
|
|
|
[uint16]$Manufacturer_Id,
|
|
|
|
[string]$Manufacturer,
|
|
|
|
[uint16]$Device_Type_Id,
|
|
|
|
[uint16]$Role_Id,
|
|
|
|
[string]$Role,
|
|
|
|
[uint16]$Tenant_Id,
|
|
|
|
[string]$Tenant,
|
|
|
|
[uint16]$Platform_Id,
|
|
|
|
[string]$Platform,
|
|
|
|
[string]$Asset_Tag,
|
|
|
|
[uint16]$Site_Id,
|
|
|
|
[string]$Site,
|
|
|
|
[uint16]$Rack_Group_Id,
|
|
|
|
[uint16]$Rack_Id,
|
|
|
|
[uint16]$Cluster_Id,
|
|
|
|
[uint16]$Model,
|
|
|
|
[object]$Status,
|
|
|
|
[bool]$Is_Full_Depth,
|
|
|
|
[bool]$Is_Console_Server,
|
|
|
|
[bool]$Is_PDU,
|
|
|
|
[bool]$Is_Network_Device,
|
|
|
|
[string]$MAC_Address,
|
|
|
|
[bool]$Has_Primary_IP,
|
|
|
|
[uint16]$Virtual_Chassis_Id,
|
|
|
|
[uint16]$Position,
|
|
|
|
[string]$Serial,
|
|
|
|
[switch]$Raw
|
|
)
|
|
|
|
#endregion Parameters
|
|
|
|
if ($null -ne $Status) {
|
|
$PSBoundParameters.Status = ValidateDCIMChoice -ProvidedValue $Status -DeviceStatus
|
|
}
|
|
|
|
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'devices'))
|
|
|
|
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Raw'
|
|
|
|
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
|
|
|
InvokeNetboxRequest -URI $URI -Raw:$Raw
|
|
}
|
|
|
|
function Get-NetboxDCIMDeviceType {
|
|
[CmdletBinding()]
|
|
#region Parameters
|
|
param
|
|
(
|
|
[uint16]$Offset,
|
|
|
|
[uint16]$Limit,
|
|
|
|
[uint16[]]$Id,
|
|
|
|
[string]$Query,
|
|
|
|
[string]$Slug,
|
|
|
|
[string]$Manufacturer,
|
|
|
|
[uint16]$Manufacturer_Id,
|
|
|
|
[string]$Model,
|
|
|
|
[string]$Part_Number,
|
|
|
|
[uint16]$U_Height,
|
|
|
|
[bool]$Is_Full_Depth,
|
|
|
|
[bool]$Is_Console_Server,
|
|
|
|
[bool]$Is_PDU,
|
|
|
|
[bool]$Is_Network_Device,
|
|
|
|
[uint16]$Subdevice_Role,
|
|
|
|
[switch]$Raw
|
|
)
|
|
#endregion Parameters
|
|
|
|
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'device-types'))
|
|
|
|
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Raw'
|
|
|
|
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
|
|
|
InvokeNetboxRequest -URI $URI -Raw:$Raw
|
|
}
|
|
|
|
function Get-NetboxDCIMDeviceRole {
|
|
[CmdletBinding()]
|
|
param
|
|
(
|
|
[uint16]$Limit,
|
|
|
|
[uint16]$Offset,
|
|
|
|
[Parameter(ParameterSetName = 'ById')]
|
|
[uint16[]]$Id,
|
|
|
|
[string]$Name,
|
|
|
|
[string]$Slug,
|
|
|
|
[string]$Color,
|
|
|
|
[bool]$VM_Role,
|
|
|
|
[switch]$Raw
|
|
)
|
|
|
|
switch ($PSCmdlet.ParameterSetName) {
|
|
'ById' {
|
|
foreach ($DRId in $Id) {
|
|
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'device-roles', $DRId))
|
|
|
|
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id', 'Raw'
|
|
|
|
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
|
|
|
InvokeNetboxRequest -URI $URI -Raw:$Raw
|
|
}
|
|
|
|
break
|
|
}
|
|
|
|
default {
|
|
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'device-roles'))
|
|
|
|
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Raw'
|
|
|
|
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
|
|
|
InvokeNetboxRequest -URI $URI -Raw:$Raw
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion GET commands
|
|
|
|
|
|
#region NEW commands
|
|
|
|
function New-NetboxDCIMDevice {
|
|
[CmdletBinding()]
|
|
[OutputType([pscustomobject])]
|
|
#region Parameters
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$Name,
|
|
|
|
[Parameter(Mandatory = $true)]
|
|
[object]$Device_Role,
|
|
|
|
[Parameter(Mandatory = $true)]
|
|
[object]$Device_Type,
|
|
|
|
[Parameter(Mandatory = $true)]
|
|
[uint16]$Site,
|
|
|
|
[object]$Status = 'Active',
|
|
|
|
[uint16]$Platform,
|
|
|
|
[uint16]$Tenant,
|
|
|
|
[uint16]$Cluster,
|
|
|
|
[uint16]$Rack,
|
|
|
|
[uint16]$Position,
|
|
|
|
[object]$Face,
|
|
|
|
[string]$Serial,
|
|
|
|
[string]$Asset_Tag,
|
|
|
|
[uint16]$Virtual_Chassis,
|
|
|
|
[uint16]$VC_Priority,
|
|
|
|
[uint16]$VC_Position,
|
|
|
|
[uint16]$Primary_IP4,
|
|
|
|
[uint16]$Primary_IP6,
|
|
|
|
[string]$Comments,
|
|
|
|
[hashtable]$Custom_Fields
|
|
)
|
|
#endregion Parameters
|
|
|
|
if ($null -ne $Device_Role) {
|
|
# Validate device role?
|
|
}
|
|
|
|
if ($null -ne $Device_Type) {
|
|
# Validate device type?
|
|
}
|
|
|
|
if ($null -ne $Status) {
|
|
$PSBoundParameters.Status = ValidateDCIMChoice -ProvidedValue $Status -DeviceStatus
|
|
}
|
|
|
|
if ($null -ne $Face) {
|
|
$PSBoundParameters.Face = ValidateDCIMChoice -ProvidedValue $Face -DeviceFace
|
|
}
|
|
|
|
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'devices'))
|
|
|
|
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters
|
|
|
|
$URI = BuildNewURI -Segments $URIComponents.Segments
|
|
|
|
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method POST
|
|
}
|
|
|
|
#endregion NEW commands
|
|
|
|
|
|
#region SET commands
|
|
|
|
function Set-NetboxDCIMDevice {
|
|
[CmdletBinding(SupportsShouldProcess = $true)]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true,
|
|
ValueFromPipelineByPropertyName = $true)]
|
|
[uint16[]]$Id,
|
|
|
|
[string]$Name,
|
|
|
|
[object]$Device_Role,
|
|
|
|
[object]$Device_Type,
|
|
|
|
[uint16]$Site,
|
|
|
|
[object]$Status,
|
|
|
|
[uint16]$Platform,
|
|
|
|
[uint16]$Tenant,
|
|
|
|
[uint16]$Cluster,
|
|
|
|
[uint16]$Rack,
|
|
|
|
[uint16]$Position,
|
|
|
|
[object]$Face,
|
|
|
|
[string]$Serial,
|
|
|
|
[string]$Asset_Tag,
|
|
|
|
[uint16]$Virtual_Chassis,
|
|
|
|
[uint16]$VC_Priority,
|
|
|
|
[uint16]$VC_Position,
|
|
|
|
[uint16]$Primary_IP4,
|
|
|
|
[uint16]$Primary_IP6,
|
|
|
|
[string]$Comments,
|
|
|
|
[hashtable]$Custom_Fields,
|
|
|
|
[switch]$Force
|
|
)
|
|
|
|
begin {
|
|
if ($null -ne $Status) {
|
|
$PSBoundParameters.Status = ValidateDCIMChoice -ProvidedValue $Status -DeviceStatus
|
|
}
|
|
|
|
if ($null -ne $Face) {
|
|
$PSBoundParameters.Face = ValidateDCIMChoice -ProvidedValue $Face -DeviceFace
|
|
}
|
|
}
|
|
|
|
process {
|
|
foreach ($DeviceID in $Id) {
|
|
$CurrentDevice = Get-NetboxDCIMDevice -Id $DeviceID -ErrorAction Stop
|
|
|
|
if ($Force -or $pscmdlet.ShouldProcess("$($CurrentDevice.Name)", "Set")) {
|
|
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'devices', $CurrentDevice.Id))
|
|
|
|
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id', 'Force'
|
|
|
|
$URI = BuildNewURI -Segments $URIComponents.Segments
|
|
|
|
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method PATCH
|
|
}
|
|
}
|
|
}
|
|
|
|
end {
|
|
|
|
}
|
|
}
|
|
|
|
#endregion SET commands
|
|
|
|
|
|
#region REMOVE commands
|
|
|
|
function Remove-NetboxDCIMDevice {
|
|
<#
|
|
.SYNOPSIS
|
|
Delete a device
|
|
|
|
.DESCRIPTION
|
|
Deletes a device from Netbox by ID
|
|
|
|
.PARAMETER Id
|
|
Database ID of the device
|
|
|
|
.PARAMETER Force
|
|
Force deletion without any prompts
|
|
|
|
.EXAMPLE
|
|
PS C:\> Remove-NetboxDCIMDevice -Id $value1
|
|
|
|
.NOTES
|
|
Additional information about the function.
|
|
#>
|
|
|
|
[CmdletBinding(ConfirmImpact = 'High',
|
|
SupportsShouldProcess = $true)]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true,
|
|
ValueFromPipelineByPropertyName = $true)]
|
|
[uint16[]]$Id,
|
|
|
|
[switch]$Force
|
|
)
|
|
|
|
begin {
|
|
|
|
}
|
|
|
|
process {
|
|
foreach ($DeviceID in $Id) {
|
|
$CurrentDevice = Get-NetboxDCIMDevice -Id $DeviceID -ErrorAction Stop
|
|
|
|
if ($Force -or $pscmdlet.ShouldProcess("Name: $($CurrentDevice.Name) | ID: $($CurrentDevice.Id)", "Remove")) {
|
|
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'devices', $CurrentDevice.Id))
|
|
|
|
$URI = BuildNewURI -Segments $Segments
|
|
|
|
InvokeNetboxRequest -URI $URI -Method DELETE
|
|
}
|
|
}
|
|
}
|
|
|
|
end {
|
|
|
|
}
|
|
}
|
|
|
|
#endregion REMOVE commands |