networking.psm1
<# .SYNOPSIS Get the networking information for one of the appliance's network interfaces. .DESCRIPTION Either get all network interfaces or one network interface as specified by the Interface parameter. This will display networking information such as IP address, netmask, gateway, and DNS servers. Supports IPv4 and IPv6. .PARAMETER Appliance IP address or hostname of a Safeguard appliance. .PARAMETER AccessToken A string containing the bearer token to be used with Safeguard Web API. .PARAMETER Insecure Ignore verification of Safeguard appliance SSL certificate. .PARAMETER Interface A string containing the name of the network interface to get (e.g. X0, X1). .INPUTS None. .OUTPUTS JSON response from Safeguard Web API. .EXAMPLE Get-SafeguardNetworkInterface X0 .EXAMPLE Get-SafeguardNetworkInterface #> function Get-SafeguardNetworkInterface { [CmdletBinding()] Param( [Parameter(Mandatory=$false)] [string]$Appliance, [Parameter(Mandatory=$false)] [object]$AccessToken, [Parameter(Mandatory=$false)] [switch]$Insecure, [Parameter(Mandatory=$false,Position=0)] [ValidateSet("Mgmt", "X0", "X1", IgnoreCase=$true)] [string]$Interface ) $ErrorActionPreference = "Stop" if (-not $PSBoundParameters.ContainsKey("Verbose")) { $VerbosePreference = $PSCmdlet.GetVariableValue("VerbosePreference") } if ($PSBoundParameters.ContainsKey("Interface")) { Invoke-SafeguardMethod -AccessToken $AccessToken -Appliance $Appliance -Insecure:$Insecure Appliance GET "NetworkInterfaces/$($Interface.ToUpper())" } else { Invoke-SafeguardMethod -AccessToken $AccessToken -Appliance $Appliance -Insecure:$Insecure Appliance GET NetworkInterfaces } } <# .SYNOPSIS Change the networking information for the appliance's network interfaces. .DESCRIPTION Change the IP address, netmask, gateway, or DNS servers associated with a Safeguard appliance network interface. Supports IPv4 and IPv6. If you modify X0, you this script will wait until the interface becomes available at the new address. You can turn off this behavior with a switch. You may need to reconnect after modifying X0 using the Connect-Safeguard cmdlet. .PARAMETER Appliance IP address or hostname of a Safeguard appliance. .PARAMETER AccessToken A string containing the bearer token to be used with Safeguard Web API. .PARAMETER Insecure Ignore verification of Safeguard appliance SSL certificate. .PARAMETER Interface A string containing the name of the network interface to set (e.g. X0, X1). .PARAMETER Ipv4Address A string containing the new address. .PARAMETER Ipv4NetMask A string containing the netmask (e.g. 255.255.255.0). .PARAMETER Ipv4Gateway A string containing the address of a gateway. .PARAMETER Ipv6Address A string containing the new address. .PARAMETER Ipv6PrefixLength An integer containing the prefix length (e.g. 48). .PARAMETER Ipv6Gateway A string containing the address of a gateway. .PARAMETER DnsServers An array of strings containing addresses for DNS servers. .PARAMETER NetworkObject An object containing the existing network interface object with desired properties set. .INPUTS None. .OUTPUTS JSON response from Safeguard Web API. .EXAMPLE Set-SafeguardNetworkInterface X0 -Ipv4Address "10.1.1.162" -Ipv4NetMask "255.255.255.0" -Ipv4Gateway "10.1.1.1" -DnsServers @("10.1.1.37","10.1.1.10") .EXAMPLE Set-SafeguardNetworkInterface X0 -Ipv4Address "10.1.1.162" #> function Set-SafeguardNetworkInterface { [CmdletBinding()] Param( [Parameter(Mandatory=$false)] [string]$Appliance, [Parameter(Mandatory=$false)] [object]$AccessToken, [Parameter(Mandatory=$false)] [switch]$Insecure, [Parameter(Mandatory=$true,Position=0)] [ValidateSet("Mgmt", "X0", "X1", IgnoreCase=$true)] [string]$Interface, [Parameter(ParameterSetName="Attributes",Mandatory=$false,Position=1)] [string]$Ipv4Address, [Parameter(ParameterSetName="Attributes",Mandatory=$false,Position=2)] [string]$Ipv4NetMask, [Parameter(ParameterSetName="Attributes",Mandatory=$false,Position=3)] [string]$Ipv4Gateway, [Parameter(ParameterSetName="Attributes",Mandatory=$false)] [string]$Ipv6Address, [Parameter(ParameterSetName="Attributes",Mandatory=$false)] [int]$Ipv6PrefixLength, [Parameter(ParameterSetName="Attributes",Mandatory=$false)] [string]$Ipv6Gateway, [Parameter(ParameterSetName="Attributes",Mandatory=$false)] [string[]]$DnsServers, [Parameter(ParameterSetName="Object",Mandatory=$true)] [object]$NetworkObject, [Parameter(Mandatory=$false)] [switch]$NoWait ) $ErrorActionPreference = "Stop" if (-not $PSBoundParameters.ContainsKey("Verbose")) { $VerbosePreference = $PSCmdlet.GetVariableValue("VerbosePreference") } Import-Module -Name "$PSScriptRoot\ps-utilities.psm1" -Scope Local Import-Module -name "$PSScriptRoot\sg-utilities.psm1" -Scope Local if (-not ($PsCmdlet.ParameterSetName -eq "Object")) { $NetworkObject = (Get-SafeguardNetworkInterface -AccessToken $AccessToken -Appliance $Appliance -Insecure:$Insecure $Interface) if ($PSBoundParameters.ContainsKey("Ipv4Address")) { $NetworkObject.Ipv4Address = $Ipv4Address } if ($PSBoundParameters.ContainsKey("Ipv4NetMask")) { $NetworkObject.Ipv4NetMask = $Ipv4NetMask } if ($PSBoundParameters.ContainsKey("Ipv4Gateway")) { $NetworkObject.Ipv4Gateway = $Ipv4Gateway } if ($PSBoundParameters.ContainsKey("Ipv6Address")) { $NetworkObject.Ipv6Address = $Ipv6Address } if ($PSBoundParameters.ContainsKey("Ipv6PrefixLength")) { $NetworkObject.Ipv6PrefixLength = $Ipv6PrefixLength } if ($PSBoundParameters.ContainsKey("Ipv6Gateway")) { $NetworkObject.Ipv6Gateway = $Ipv6Gateway } if ($PSBoundParameters.ContainsKey("DnsServers")) { $NetworkObject.DnsServers = $DnsServers } } Invoke-SafeguardMethod -AccessToken $AccessToken -Appliance $Appliance -Insecure:$Insecure Appliance PUT "NetworkInterfaces/$($Interface.ToUpper())" -Body $NetworkObject if ($Interface -ieq "X0" -and -not $NoWait) { if ($PSBoundParameters.ContainsKey("Insecure")) { $Insecure = $true } elseif (-not $Appliance -and $SafeguardSession) { $Insecure = $SafeguardSession["Insecure"] } Write-Host "Waiting up to 5 minutes for Safeguard to come back online at new IP address." if ($NetworkObject.Ipv4Address) { Wait-ForSafeguardOnlineStatus -Appliance $NetworkObject.Ipv4Address -Insecure:$Insecure -Timeout 300 } else { Wait-ForSafeguardOnlineStatus -Appliance $NetworkObject.Ipv6Address -Insecure:$Insecure -Timeout 300 } Write-Host "You may need to re-run Connect-Safeguard to connect to the new address." } } <# .SYNOPSIS Get the DNS suffixes for one of the appliance's network interfaces. .DESCRIPTION Get the currently configured DNS suffixes for a single network interface. .PARAMETER Appliance IP address or hostname of a Safeguard appliance. .PARAMETER AccessToken A string containing the bearer token to be used with Safeguard Web API. .PARAMETER Insecure Ignore verification of Safeguard appliance SSL certificate. .PARAMETER Interface A string containing the name of the network interface to get (e.g. X0, X1). .INPUTS None. .OUTPUTS JSON response from Safeguard Web API. .EXAMPLE Get-SafeguardNetworkInterface X0 .EXAMPLE Get-SafeguardNetworkInterface #> function Get-SafeguardDnsSuffix { [CmdletBinding()] Param( [Parameter(Mandatory=$false)] [string]$Appliance, [Parameter(Mandatory=$false)] [object]$AccessToken, [Parameter(Mandatory=$false)] [switch]$Insecure, [Parameter(Mandatory=$true,Position=0)] [ValidateSet("Mgmt", "X0", "X1", IgnoreCase=$true)] [string]$Interface ) $ErrorActionPreference = "Stop" if (-not $PSBoundParameters.ContainsKey("Verbose")) { $VerbosePreference = $PSCmdlet.GetVariableValue("VerbosePreference") } Invoke-SafeguardMethod -AccessToken $AccessToken -Appliance $Appliance -Insecure:$Insecure Appliance GET "NetworkDnsSuffixConfig/$($Interface.ToUpper())" } <# .SYNOPSIS Set the DNS suffixes for one of the appliance's network interfaces. .DESCRIPTION Set the DNS suffixes for a single network interface. .PARAMETER Appliance IP address or hostname of a Safeguard appliance. .PARAMETER AccessToken A string containing the bearer token to be used with Safeguard Web API. .PARAMETER Insecure Ignore verification of Safeguard appliance SSL certificate. .PARAMETER Interface A string containing the name of the network interface to set DNS suffixes for (e.g. X0, X1). .PARAMETER DnsSuffixes An array of strings containing the DNS suffixes to set. .INPUTS None. .OUTPUTS JSON response from Safeguard Web API. .EXAMPLE Get-SafeguardNetworkInterface X0 example.com .EXAMPLE Get-SafeguardNetworkInterface X1 "example.com","help.com" #> function Set-SafeguardDnsSuffix { [CmdletBinding()] Param( [Parameter(Mandatory=$false)] [string]$Appliance, [Parameter(Mandatory=$false)] [object]$AccessToken, [Parameter(Mandatory=$false)] [switch]$Insecure, [Parameter(Mandatory=$true,Position=0)] [ValidateSet("Mgmt", "X0", "X1", IgnoreCase=$true)] [string]$Interface, [Parameter(Mandatory=$true,Position=1)] [string[]]$DnsSuffixes ) $ErrorActionPreference = "Stop" if (-not $PSBoundParameters.ContainsKey("Verbose")) { $VerbosePreference = $PSCmdlet.GetVariableValue("VerbosePreference") } Invoke-SafeguardMethod -AccessToken $AccessToken -Appliance $Appliance -Insecure:$Insecure Appliance PUT "NetworkDnsSuffixConfig/$($Interface.ToUpper())" -Body @{ DomainNames = $DnsSuffixes } } |