Public/Vlans-Ports.ps1
# # Copyright 2018, Alexis La Goutte <alexis.lagoutte at gmail dot com> # # SPDX-License-Identifier: Apache-2.0 # function Add-ArubaSWVlansPorts { <# .SYNOPSIS Add a Vlan on a Port .DESCRIPTION Add vlan (Untagged, Tagged, Forbiden) on a switch Port .EXAMPLE Add-ArubaSWVlansPorts -vlan_id 85 -port_id 8 -port_mode tagged Add vlan id 85 on port 8 (tagged mode) .EXAMPLE Add-ArubaSWVlansPorts 85 8 untagged Add vlan id 23 on port 8 (untagged mode) #> Param( [Parameter (Mandatory=$true, Position=1)] [int]$vlan_id, [Parameter (Mandatory=$true, Position=2)] [string]$port_id, [Parameter (Mandatory=$true, Position=3)] [ValidateSet("Untagged", "tagged", "Forbidden")] [string]$port_mode ) Begin { } Process { $url = "rest/v4/vlans-ports" $vlanports = new-Object -TypeName PSObject $vlanports | add-member -name "vlan_id" -membertype NoteProperty -Value $vlan_id $vlanports | add-member -name "port_id" -membertype NoteProperty -Value $port_id switch ($port_mode) { { $_ -eq "Untagged"} { $vlanports | add-member -name "port_mode" -membertype NoteProperty -Value "POM_UNTAGGED" } { $_ -eq "tagged"} { $vlanports | add-member -name "port_mode" -membertype NoteProperty -Value "POM_TAGGED_STATIC" } { $_ -eq "Forbidden"} { $vlanports | add-member -name "port_mode" -membertype NoteProperty -Value "POM_FORBIDDEN" } } $response = invoke-ArubaSWWebRequest -method "POST" -body $vlanports -url $url $rep_vlansports = ($response.Content | convertfrom-json) $rep_vlansports } End { } } function Get-ArubaSWVlansPorts { <# .SYNOPSIS Get Vlans Ports about ArubaOS Switch (Provision) .DESCRIPTION Get Vlans Ports (id, interface and mode) .EXAMPLE Get-ArubaSWVlansPorts Get ALL vlans Ports on the switch .EXAMPLE Get-ArubaSWVlansPorts -vlan_id 85 Get All Port on vlan 85 .EXAMPLE Get-ArubaSWVlansPorts -port_id 10 Get vlan port info about port 10 #> #[CmdLetBinding(DefaultParameterSetName="Default")] Param( [Parameter (Mandatory=$false)] [int]$vlan_id, [Parameter (Mandatory=$false)] [string]$port_id ) Begin { } Process { $url = "rest/v4/vlans-ports" $response = invoke-ArubaSWWebRequest -method "GET" -url $url $vlansports = ($response.Content | convertfrom-json).vlan_port_element if ($PsBoundParameters.ContainsKey('vlan_id')){ $vlansports = $vlansports | where-object {$_.vlan_id -eq $vlan_id} } if ($PsBoundParameters.ContainsKey('port_id')){ $vlansports = $vlansports | where-object {$_.port_id -eq $port_id} } $vlansports } End { } } function Set-ArubaSWVlansPorts { <# .SYNOPSIS Configure Vlan Ports on ArubaOS Switch (Provision) .DESCRIPTION Configure vlan Ports Mode (Tagged, Untagged, Forbidden) .EXAMPLE $vlanport = Get-ArubaSWVlansPorts -vlan_id 85 -port_id 8 PS C:\>$vlanport | Set-ArubaSWVlansPorts -port_mode untagged (Re)configure vlan id 85 on port id 8 with mode untagged .EXAMPLE Set-ArubaSWVlansPorts -vlan_id 23 -port_id 8 -port_mode tagged (Re)configure vlan id 23 on port id 8 with mode tagged #> Param( [Parameter (Mandatory=$true, ParameterSetName="id")] [int]$vlan_id, [Parameter (Mandatory=$true, ParameterSetName="id")] [string]$port_id, [Parameter (Mandatory=$true, ValueFromPipeline=$true, Position=1, ParameterSetName="vlan")] #ValidateScript({ ValidateVlan $_ })] [psobject]$vlanports, [Parameter (Mandatory=$true, Position=3)] [ValidateSet("Untagged", "Tagged", "Forbidden")] [string]$port_mode ) Begin { } Process { #get vlan id and port id from vlanports ps object if($vlanports){ $vlan_id = $vlanports.vlan_id $port_id = $vlanports.port_id } $url = "rest/v4/vlans-ports/${vlan_id}-${port_id}" $_vlanport = new-Object -TypeName PSObject $_vlanport | add-member -name "vlan_id" -membertype NoteProperty -Value $vlan_id $_vlanport | add-member -name "port_id" -membertype NoteProperty -Value $port_id switch ($port_mode) { { $_ -eq "Untagged"} { $_vlanport | add-member -name "port_mode" -membertype NoteProperty -Value "POM_UNTAGGED" } { $_ -eq "tagged"} { $_vlanport | add-member -name "port_mode" -membertype NoteProperty -Value "POM_TAGGED_STATIC" } { $_ -eq "Forbidden"} { $_vlanport | add-member -name "port_mode" -membertype NoteProperty -Value "POM_FORBIDDEN" } } $response = invoke-ArubaSWWebRequest -method "PUT" -body $_vlanport -url $url $rep_vlanport = ($response.Content | convertfrom-json) $rep_vlanport } End { } } function Remove-ArubaSWVlansPorts { <# .SYNOPSIS Remove a Vlan Ports on ArubaOS Switch (Provision) .DESCRIPTION Remove vlan ports on the switch .EXAMPLE $vlanport = Get-ArubaSWVlansPorts -vlan_id 85 -port_id 8 PS C:\>$vlanport | Remove-ArubaSWVlansPorts Remove vlan 85 on port 8 .EXAMPLE Remove-ArubaSWVlansPorts -vlan_id 85 -port_id 8 -noconfirm Remove vlan id 85 on port 8 with no confirmation #> Param( [Parameter (Mandatory=$true, ParameterSetName="id")] [int]$vlan_id, [Parameter (Mandatory=$true, ParameterSetName="id")] [string]$port_id, [Parameter (Mandatory=$true, ValueFromPipeline=$true, Position=1, ParameterSetName="vlan")] #ValidateScript({ ValidateVlan $_ })] [psobject]$vlanport, [Parameter(Mandatory = $false)] [switch]$noconfirm ) Begin { } Process { #get vlan id and port id from vlan ports ps object if($vlanport){ $vlan_id = $vlanport.vlan_id $port_id = $vlanport.port_id } $url = "rest/v4/vlans-ports/${vlan_id}-${port_id}" if ( -not ( $Noconfirm )) { $message = "Remove Vlan on switch" $question = "Proceed with removal of vlan ${vlan_id} on port ${port_id}?" $choices = New-Object Collections.ObjectModel.Collection[Management.Automation.Host.ChoiceDescription] $choices.Add((New-Object Management.Automation.Host.ChoiceDescription -ArgumentList '&Yes')) $choices.Add((New-Object Management.Automation.Host.ChoiceDescription -ArgumentList '&No')) $decision = $Host.UI.PromptForChoice($message, $question, $choices, 1) } else { $decision = 0 } if ($decision -eq 0) { Write-Progress -activity "Remove Vlan Port" $null = Invoke-ArubaSWWebRequest -method "DELETE" -url $url Write-Progress -activity "Remove Vlan Port" -completed } } End { } } |