Public/Remove-UnityCifsServer.ps1

Function Remove-UnityCIFSServer {

  <#
      .SYNOPSIS
      Delete a Cifs Server.
      .DESCRIPTION
      Delete a Cifs Server.
      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
      Remove-UnityCifsServer -Name 'CIFS01'
 
      Delete the Cifs Server named 'CIFS01'
      .EXAMPLE
      Get-UnityCifsServer -Name 'CIFS01' | Remove-UnityCifsServer
 
      Delete the Cifs Server named 'CIFS01'. The Cifs Server's informations are provided by the Get-UnityNasServer through the pipeline.
  #>


    [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 = 'CIFS Server Name or CIFS Server Object')]
    $Name,
    [Parameter(Mandatory = $false,HelpMessage = 'Keep SMB server account unjoined in Active Directory after deletion')]
    [bool]$skipUnjoin,
    [Parameter(Mandatory = $false,HelpMessage = 'Username for unjoin')]
    [String]$domainUsername,
    [Parameter(Mandatory = $false,HelpMessage = 'Password for unjoin')]
    [String]$domainPassword
  )

  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) {

        Foreach ($n in $Name) {

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

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

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

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

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

          If ($NasServerID) {
            #Building the URI
            $URI = 'https://'+$sess.Server+'/api/instances/cifsServer/'+$NasServerID
            Write-Verbose "URI: $URI"

            if ($pscmdlet.ShouldProcess($NasServerName,"Delete Cifs Server")) {
              #Sending the request
              $request = Send-UnityRequest -uri $URI -Session $Sess -Method 'DELETE' -Body $body
            }

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

              Write-Verbose "CIFS Server with ID: $id has been deleted"

            }
          } else {
            Write-Information -MessageData "LUN $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 {}
}