Public/Set-UnityFileDNSServer.ps1
Function Set-UnityFileDnsServer { <# .SYNOPSIS Modifies File DNS Server parameters. .DESCRIPTION Modifies File DNS Server parameters. You need to have an active session with the array. .NOTES Written by Erwan Quelin under Apache licence - https://github.com/equelin/Unity-Powershell/blob/master/LICENSE .LINK https://github.com/equelin/Unity-Powershell .EXAMPLE Set-UnityFileDnsServer -ID 'dns_1' -ipAddress '192.168.0.1' Change ip of the file DNS server with ID 'dns_1' #> [CmdletBinding(SupportsShouldProcess = $True,ConfirmImpact = 'High')] Param ( [Parameter(Mandatory = $false,HelpMessage = 'EMC Unity Session')] $session = ($global:DefaultUnitySession | where-object {$_.IsConnected -eq $true}), [Parameter(Mandatory = $true,Position = 0,ValueFromPipeline=$True,ValueFromPipelinebyPropertyName=$True,HelpMessage = 'File interface ID or Object')] $ID, [Parameter(Mandatory = $false,HelpMessage = 'DNS domain name')] [string]$domain, [Parameter(Mandatory = $false,HelpMessage = 'Prioritized list of one to three IPv4 and/or IPv6 addresses of DNS servers for the domain')] [String[]]$addresses, [Parameter(Mandatory = $false,HelpMessage = 'replication policy')] [ReplicationPolicyEnum]$replicationPolicy ) Begin { Write-Verbose "Executing function: $($MyInvocation.MyCommand)" } Process { Foreach ($sess in $session) { Write-Verbose "Processing Session: $($sess.Server) with SessionId: $($sess.SessionId)" If (Test-UnityConnection -Session $Sess) { # Determine input and convert to UnityPool object Switch ($ID.GetType().Name) { "String" { $FileDNSServer = get-UnityFileDNSServer -Session $Sess -ID $ID $FileDNSServerID = $FileDNSServer.id $FileDNSServerName = $FileDNSServer.Name } "UnityFileInterface" { Write-Verbose "Input object type is $($ID.GetType().Name)" $FileDNSServerID = $ID.id If ($FileDNSServer = Get-UnityFileDNSServer -Session $Sess -ID $FileDNSServerID) { $FileDNSServerName = $ID.name } } } If ($FileDNSServerID) { # Creation of the body hash $body = @{} #Addresses argument $body['addresses'] = @() Foreach ($Addresse in $Addresses) { $body["addresses"] += $Addresse } If ($PSBoundParameters.ContainsKey('domain')) { $body["domain"] = "$($domain)" } If ($PSBoundParameters.ContainsKey('replicationPolicy')) { $body["replicationPolicy"] = $replicationPolicy } #Building the URI $URI = 'https://'+$sess.Server+'/api/instances/fileDNSServer/'+$FileDNSServerID+'/action/modify' Write-Verbose "URI: $URI" #Sending the request If ($pscmdlet.ShouldProcess($FileDNSServerID,"Modify File DNS Server Interface")) { $request = Send-UnityRequest -uri $URI -Session $Sess -Method 'POST' -Body $Body } If ($request.StatusCode -eq '204') { Write-Verbose "File DNS Server with ID: $FileDNSServerID has been modified" Get-UnityFileDNSServer -Session $Sess -id $FileDNSServerID } } else { Write-Verbose "NAS Server $FileDNSServerID does not exist on the array $($sess.Name)" } } else { Write-Information -MessageData "You are no longer connected to EMC Unity array: $($Sess.Server)" } } } End {} } |