Public/Enable-UnityFastCache.ps1
Function Enable-UnityFastCache { <# .SYNOPSIS Enable FAST Cache. .DESCRIPTION Enable FAST Cache using specified disk group and number of disks and if specified, Enable FAST Cache on all existing pools. 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 .PARAMETER Session Specifies an UnitySession Object. .PARAMETER diskgroup Specify the disk group ID to include in the FAST Cache. .PARAMETER numberOfDisks Specify the number of disks to include in the FAST Cache. .PARAMETER enableOnAllPools Specify whether FAST Cache is enabled on all existing pools. .EXAMPLE Enable-UnityFastCache -diskgroup 'DG_1' -numberOfDisks 2 Enable Fast Cache with 2 disk from the disk group 'DG_1' #> [CmdletBinding(SupportsShouldProcess = $True,ConfirmImpact = 'High')] Param ( #Default Parameters [Parameter(Mandatory = $false,HelpMessage = 'EMC Unity Session')] $session = ($global:DefaultUnitySession | where-object {$_.IsConnected -eq $true}), #FastCache enable parameters [Parameter(Mandatory = $true,HelpMessage = 'Disk group ID from which to take disks for FAST cache')] [string]$diskgroup, [Parameter(Mandatory = $true,HelpMessage = 'Number of disks')] [int]$numberOfDisks, [Parameter(Mandatory = $false,HelpMessage = 'Enable FAST Cache for all existing pools')] [switch]$enableOnAllPools ) 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()) { # Creation of the body hash $body = @{} #diskgroup $body['diskgroup'] = @{} $diskgroupParam = @{} $diskgroupParam['id'] = $diskgroup $body['diskgroup'] = $diskgroupParam #numberOfDisks $body['numberOfDisks'] = $numberOfDisks # enableOnAllPools If ($PSBoundParameters.ContainsKey('enableOnAllPools')) { $body["enableOnAllPools"] = $true } #Building the URI $URI = 'https://'+$sess.Server+'/api/instances/fastCache/0/action/enable?timeout=0' #run async Write-Verbose "URI: $URI" #Sending the request If ($pscmdlet.ShouldProcess($($Sess.Server),"Enable Fast Cache")) { $request = Send-UnityRequest -uri $URI -Session $Sess -Method 'POST' -Body $Body } If ($request.StatusCode -eq '202') { Write-Host "Fast Cache is currently enabling" } } else { Write-Information -MessageData "You are no longer connected to EMC Unity array: $($Sess.Server)" } } } End {} } |