PowerCLI Unmap Multiple Datastores
Here is a script I have that I use quite frequently. There are times I need to run an unmap on my volumes to help free up space that the SAN thinks is still in use. Some of my VCenter Environments contain a lot of Datastores, so it can get very redundant having to run the command one by one within the putty session. So here is a script that will connect to my VCenter, grab a random Host, and start unmapping each datastore within the wildcard parameter. You can also just do one datastore if you would like by putting the full datastore name instead of using a wildcard. If you have storage DRS enabled on a thin-provisoned back in SAN this will definitely come in handy, and I suggest you make it a scheduled task to run frequently.
So things you will need to change for your environment $VIServer = “vcentername” , -Name Datastore* , -Location ClusterName
# Start Load VMware Snapin (if not already loaded) if (!(Get-PSSnapin -Name VMware.VimAutomation.Core -ErrorAction SilentlyContinue)) { if (!(Add-PSSnapin -PassThru VMware.VimAutomation.Core)) { # Error out if loading fails Write-Error "ERROR: Cannot load the VMware Snapin. Is the PowerCLI installed?" Exit } } # End Load VMware Snapin (if not already loaded) # Start Set Session Timout $initialTimeout = (Get-PowerCLIConfiguration -Scope Session).WebOperationTimeoutSeconds Set-PowerCLIConfiguration -Scope Session -WebOperationTimeoutSeconds -1 -Confirm:$False # End Set Session Timout # Global Paramenters $VIServer = "vcentername" $Verberose = $true #Connect to VCenter $OpenConnection = $global:DefaultVIServers | where { $_.Name -eq $VIServer } if($OpenConnection.IsConnected) { Write-Output "vCenter is Already Connected..." $VIConnection = $OpenConnection } else { Connect-VIServer -Server $VIServer } foreach ($ds in (Get-Datastore -Name COMP* | where{$_.Type -eq 'VMFS'})) { $esx = Get-VMHost -Location ClusterName -Datastore $ds | Get-Random -Count 1 $esxcli = Get-EsxCli -VMHost $esx Write-Host 'Unmapping' $ds on $esx $esxcli.storage.vmfs.unmap($null, $ds.Name, $null) Write-Host 'Datastore' $ds.Name ' has been unmapped' } Write-Host 'Completed all Datastore UN-Mappings' Write-Host 'Disconnecting from VCENTER' $VIServer Disconnect-VIServer $VIServer -Confirm:$false
Dorian
Sep 18. 2017
Just a quick question on the -WebOperationTimeoutSeconds -1
What is the logic behind using -1 for this operation.
Prashant M B
Dec 19. 2016
Hi,
I am looking for powercli script to unmap 8 datastores in parallel (at once) with 200MB reclaim unit. could you help me with that?
Regards,
Prashant M B