Public/Set-UnityNasServer.ps1

Function Set-UnityNASServer {

  <#
      .SYNOPSIS
      Modifies NAS Server parameters.
      .DESCRIPTION
      Modifies NAS Server parameters.
      You need to have an active session with the array.
      .NOTES
      Written by Erwan Quelin under Apache licence
      .LINK
      https://github.com/equelin/Unity-Powershell
      .EXAMPLE
      Set-UnityNasServer -Name 'NAS01' -Description 'Modified description'
 
      Change the description of the NAS Server named NAS01
  #>


    [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 = 'Pool Name or Pool Object')]
    $Name,
    [Parameter(Mandatory = $false,HelpMessage = 'New Name of the Nas Server')]
    [String]$NewName,
    [Parameter(Mandatory = $false,HelpMessage = 'Storage processor ID on which the NAS server will run')]
    $homeSP,
    [Parameter(Mandatory = $false,HelpMessage = 'Indicates whether the NAS server is a replication destination')]
    [bool]$isReplicationDestination,
    [Parameter(Mandatory = $false,HelpMessage = 'Directory Service used for quering identity information for Unix')]
    $currentUnixDirectoryService,
    [Parameter(Mandatory = $false,HelpMessage = 'Indicates whether multiprotocol sharing mode is enabled')]
    [bool]$isMultiProtocolEnabled,
    [Parameter(Mandatory = $false,HelpMessage = 'Use this flag to mandatorily disable access in case of any user mapping failure')]
    [bool]$allowUnmappedUser,
    [Parameter(Mandatory = $false,HelpMessage = 'Default Unix user name used for granting access in case of Windows to Unix user mapping failure')]
    $defaultUnixUser,
    [Parameter(Mandatory = $false,HelpMessage = 'Default Windows user name used for granting access in case of Unix to Windows user mapping failure. When empty, access in such case is denied')]
    $defaultWindowsUser,
    [Parameter(Mandatory = $false,HelpMessage = 'Indicates whether a Unix to/from Windows user name mapping is enabled')]
    [bool]$enableWindowsToUnixUsernameMapping,
    [Parameter(Mandatory = $false,HelpMessage = 'Ignore warnings related to the operation')]
    [bool]$isIgnoreWarnings
  )

  Begin {
    Write-Verbose "Executing function: $($MyInvocation.MyCommand)"

    $NasServerUnixDirectoryService = @{
      "None" = "0"
      "NIS" = "2"
      "LDAP" = "3"
    }
  }

  Process {

    Foreach ($sess in $session) {

      Write-Verbose "Processing Session: $($sess.Server) with SessionId: $($sess.SessionId)"

      If (Test-UnityConnection -Session $Sess) {

        Foreach ($n in $Name) {

          # Determine input and convert to UnityPool object
          Switch ($n.GetType().Name)
          {
            "String" {
              $NasServer = get-UnityNasServer -Session $Sess -Name $n
              $NasServerID = $NasServer.id
              $NasServerName = $NasServer.Name
            }
            "UnityPool" {
              Write-Verbose "Input object type is $($n.GetType().Name)"
              $NasServerName = $n.Name
              If ($NasServer = Get-UnityNasServer -Session $Sess -Name $NasServerName) {
                        $NasServerID = $n.id
              }
            }
          }

          If ($NasServerID) {

            # Creation of the body hash
            $body = @{}

            # Name parameter
            If ($NewName) {
              $body["name"] = "$($NewName)"
            }

            # homeSP parameter
            If ($PSBoundParameters.ContainsKey('homeSP')) {
              $body["homeSP"] = @{}
              $homeSPParameters = @{}
              $homeSPParameters["id"] = "$($homeSP)"
              $body["homeSP"] = $homeSPParameters
            }

            If ($PSBoundParameters.ContainsKey('isReplicationDestination')) {
                  $body["isReplicationDestination"] = $isReplicationDestination
            }

            If ($PSBoundParameters.ContainsKey('currentUnixDirectoryService')) {
                  $body["currentUnixDirectoryService"] = "$($NasServerUnixDirectoryService["$($currentUnixDirectoryService)"])"
            }

            If ($PSBoundParameters.ContainsKey('isMultiProtocolEnabled')) {
                  $body["isMultiProtocolEnabled"] = $isMultiProtocolEnabled
            }

            If ($PSBoundParameters.ContainsKey('allowUnmappedUser')) {
                  $body["allowUnmappedUser"] = $allowUnmappedUser
            }

            If ($PSBoundParameters.ContainsKey('defaultUnixUser')) {
                  $body["defaultUnixUser"] = $defaultUnixUser
            }

            If ($PSBoundParameters.ContainsKey('defaultWindowsUser')) {
                  $body["defaultWindowsUser"] = $defaultWindowsUser
            }

            If ($PSBoundParameters.ContainsKey('enableWindowsToUnixUsernameMapping')) {
                  $body["enableWindowsToUnixUsernameMapping"] = $enableWindowsToUnixUsernameMapping
            }

            If ($PSBoundParameters.ContainsKey('isIgnoreWarnings')) {
                  $body["isIgnoreWarnings"] = $isIgnoreWarnings
            }

            #Building the URI
            $URI = 'https://'+$sess.Server+'/api/instances/nasServer/'+$NasServerID+'/action/modify'
            Write-Verbose "URI: $URI"

            #Sending the request
            If ($pscmdlet.ShouldProcess($NasServerName,"Modify NAS Server")) {
              $request = Send-UnityRequest -uri $URI -Session $Sess -Method 'POST' -Body $Body
            }

            If ($request.StatusCode -eq '204') {

              Write-Verbose "Pool with ID: $NasServerID has been modified"

              Get-UnityNasServer -Session $Sess -id $NasServerID

            }
          } else {
            Write-Verbose "NAS Server $NasServerName does not exist on the array $($sess.Name)"
          }
        }
      } else {
        Write-Information -MessageData "You are no longer connected to EMC Unity array: $($Sess.Server)"
      }
    }
  }

  End {}
}