Public/New-UnityCIFSShare.ps1
Function New-UnityCIFSShare { <# .SYNOPSIS Creates CIFS share. .DESCRIPTION Creates CIFS share. You need to have an active session with the array. .NOTES Written by Erwan Quelin under MIT licence - https://github.com/equelin/Unity-Powershell/blob/master/LICENSE .LINK https://github.com/equelin/Unity-Powershell .EXAMPLE New-UnityCIFSShare -Name 'FS01' -Description 'Modified description' Change the description of the filesystem named FS01 #> [CmdletBinding()] Param ( #Default Parameters [Parameter(Mandatory = $false,HelpMessage = 'EMC Unity Session')] $session = ($global:DefaultUnitySession | where-object {$_.IsConnected -eq $true}), #SetFilesystem [Parameter(Mandatory = $true,Position = 0,ValueFromPipeline=$True,ValueFromPipelinebyPropertyName=$True,HelpMessage = 'Filesystem Name')] [String[]]$Filesystem, #cifsShareCreate [Parameter(Mandatory = $false,HelpMessage = 'Local path to a location within a file system')] [String]$path, [Parameter(Mandatory = $true,HelpMessage = 'Name of the CIFS share unique to NAS server')] [String]$Name, [Parameter(Mandatory = $true,HelpMessage = 'CIFS server ID to use for CIFS share creation, as defined by the cifsServer type')] [String]$cifsServer, #$cifsShareParameters [Parameter(Mandatory = $false,HelpMessage = 'CIFS share description')] [String]$description, [Parameter(Mandatory = $false,HelpMessage = 'Indicates whether the CIFS share is read-only')] [bool]$isReadOnly, [Parameter(Mandatory = $false,HelpMessage = 'Indicates whether CIFS encryption for Server Message Block (SMB) 3.0 is enabled for the CIFS share')] [bool]$isEncryptionEnabled, [Parameter(Mandatory = $false,HelpMessage = 'Indicates whether continuous availability for SMB 3.0 is enabled for the CIFS share')] [bool]$isContinuousAvailabilityEnabled, [Parameter(Mandatory = $false,HelpMessage = 'Enumerate file with read access and directories with list access in folder listings')] [bool]$isABEEnabled, [Parameter(Mandatory = $false,HelpMessage = 'Branch Cache optimizes traffic between the NAS server and Branch Office Servers')] [bool]$isBranchCacheEnabled, [Parameter(Mandatory = $false,HelpMessage = 'Offline Files store a version of the shared resources on the client computer in the file system cache, a reserved portion of disk space, which the client computer can access even when it is disconnected from the network')] [CifsShareOfflineAvailabilityEnum]$offlineAvailability, [Parameter(Mandatory = $false,HelpMessage = 'The default UNIX umask for new files created on the share')] [String]$umask ) Begin { Write-Verbose "Executing function: $($MyInvocation.MyCommand)" } Process { Foreach ($sess in $session) { Write-Verbose "Processing Session: $($sess.Server) with SessionId: $($sess.SessionId)" If ($Sess.TestConnection()) { Foreach ($fs in $Filesystem) { # Determine input and convert to UnityFilesystem object Switch ($fs.GetType().Name) { "String" { $fs = get-UnityFilesystem -Session $Sess -Name $fs $filesystemID = $fs.id $filesystemName = $fs.Name } "UnityFilesystem" { Write-Verbose "Input object type is $($n.GetType().Name)" $filesystemName = $fs.Name If ($filesystem = Get-UnityFilesystem -Session $Sess -Name $fs) { $filesystemID = $fs.id } } } If ($filesystemID) { $UnityStorageRessource = Get-UnitystorageResource -Session $sess | ? {($_.Name -like $filesystemName) -and ($_.filesystem.id -like $filesystemID)} # Creation of the body hash $body = @{} $body["cifsShareCreate"] = @() $cifsShareCreateParameters = @{} # path $cifsShareCreateParameters["path"] = "$($path)" # name $cifsShareCreateParameters["name"] = "$($name)" # cifsServer $cifsShareCreateParameters["cifsServer"] = @{} $cifsServerParameters = @{} $cifsServerParameters['id'] = "$($cifsServer)" $cifsShareCreateParameters["cifsServer"] = $cifsServerParameters #$cifsShareParameters If (($PSBoundParameters.ContainsKey('description')) -or ($PSBoundParameters.ContainsKey('isReadOnly')) -or ($PSBoundParameters.ContainsKey('isEncryptionEnabled')) -or ($PSBoundParameters.ContainsKey('isContinuousAvailabilityEnabled')) -or ($PSBoundParameters.ContainsKey('isABEEnabled')) -or ($PSBoundParameters.ContainsKey('isBranchCacheEnabled')) -or ($PSBoundParameters.ContainsKey('offlineAvailability')) -or ($PSBoundParameters.ContainsKey('umask'))){ $cifsShareCreateParameters["cifsShareParameters"] = @{} $cifsShareParameters = @{} If ($PSBoundParameters.ContainsKey('description')) { $cifsShareParameters["description"] = "$($description)" } If ($PSBoundParameters.ContainsKey('isReadOnly')) { $cifsShareParameters["isReadOnly"] = $isReadOnly } If ($PSBoundParameters.ContainsKey('isEncryptionEnabled')) { $cifsShareParameters["isEncryptionEnabled"] = $isEncryptionEnabled } If ($PSBoundParameters.ContainsKey('isContinuousAvailabilityEnabled')) { $cifsShareParameters["isContinuousAvailabilityEnabled"] = $isContinuousAvailabilityEnabled } If ($PSBoundParameters.ContainsKey('isABEEnabled')) { $cifsShareParameters["isABEEnabled"] = $isABEEnabled } If ($PSBoundParameters.ContainsKey('isBranchCacheEnabled')) { $cifsShareParameters["isBranchCacheEnabled"] = $isBranchCacheEnabled } If ($PSBoundParameters.ContainsKey('offlineAvailability')) { $cifsShareParameters["offlineAvailability"] = "$($offlineAvailability)" } If ($PSBoundParameters.ContainsKey('umask')) { $cifsShareParameters["umask"] = "$($umask)" } $cifsShareCreateParameters["cifsShareParameters"] = $cifsShareParameters } $body["cifsShareCreate"] += $cifsShareCreateParameters #Building the URI $URI = 'https://'+$sess.Server+'/api/instances/storageResource/'+($UnityStorageRessource.id)+'/action/modifyFilesystem' Write-Verbose "URI: $URI" #Sending the request $request = Send-UnityRequest -uri $URI -Session $Sess -Method 'POST' -Body $Body If ($request.StatusCode -eq '204') { Write-Verbose "CIFS Share named $name on filesystem $filesystemName has been created" Get-UnityCIFSShare -Session $Sess -id $filesystemID } } else { Write-Verbose "filesystem $filesystemName does not exist on the array $($sess.Name)" } } } else { Write-Information -MessageData "You are no longer connected to EMC Unity array: $($Sess.Server)" } } } End {} } |