I just finished a script I created for a customer to help them resolve a problem with their NetApp. Basically, sometimes their NetApp snapshots would not purge and get stuck, and/or the volumes would run out of space. I advocated to them many times that if there isn’t a monitoring solution in place to detect this, PowerShell could fill in the gaps. They took me up on getting something setup because this had happened too often.
First, you need to download the NetApp DataOnTAP PowerShell toolkit and install it.
This script detects any volume with less than 90% free space, and any volume snapshot older than 14 days, which are customizable easily via the variables. Finally, it offers to delete the old snapshots while you’re running the script.
$maxvolpercentused = '90' $maxsnapshotdesiredage = (get-date).adddays(-14) import-module dataontap Write-Host "Enter a user account with full rights within the NetApp Filer" $cred = Get-Credential $controller = 'Put Your NetApp filer IP/name here' $currentcontroller = connect-nacontroller -name $controller -credential $cred Write-Host "Getting NetApp volume snapshot information..." $volsnapshots = get-navol | get-nasnapshot Write-Host "Getting NetApp volume information..." $vollowspace = get-navol | where-object {$_.percentageused -gt "$maxvolpercentused"} if ($vollowspace -eq $null){ Write-Host "All volumes have sufficient free space!" } else { Write-Host "The following NetApp volumes have low free space, and should be checked." $vollowspace Read-Host "Press Enter to continue..." Write-Host "Getting volume snapshot information for volumes with low space..." $vollowspace | get-nasnapshot | sort-object targetname | select-object targetname,name,created,@{Name="TotalGB";expression={$_.total/1GB}} Read-Host "Press Enter to continue..." } Write-Host "Checking for snapshots older than the max desired age of..." $maxsnapshotdesiredage Write-Host "Finding old snapshots..." $oldsnapshots = get-navol | get-nasnapshot | where-object {$_.created -lt "$maxsnapshotdesiredage"} if ($oldsnapshots -eq $null){ Write-Host "No old snapshots exist!" } else { Write-Host "The following snapshots are longer than the identified longest retention period..." $oldsnapshots | select-object targetname,name,created,@{Name="TotalGB";expression={$_.total/1GB}} Read-Host "Press Enter to continue..." Write-Host "You will now be asked if you would like to delete each of the above snapshots." Write-Host "Note that Yes to All and No to All will not function.." Write-Host "If you elect to delete them, it is NON-REVERSIBLE!!!" $oldsnapshots | foreach-object {$_ | select-object targetname,name,created,@{Name="TotalGB";expression={$_.total/1GB}} ; $_ | remove-nasnapshot -confirm:$true} } Write-Host "Script completed!"
The resulting output looks like this.
Enter a user account with full rights within the NetApp Filer cmdlet Get-Credential at command pipeline position 1 Supply values for the following parameters: Credential Getting NetApp volume snapshot information... Getting NetApp volume information... All volumes have sufficient free space! Checking for snapshots older than the max desired age of... Monday, July 27, 2015 11:18:58 AM Finding old snapshots... The following snapshots are longer than the identified longest retention period... TargetName : NA_NFS01_A_DD Name : smvi__Daily_NFS01_A_&_B_20120621171008 Created : 6/21/2015 4:59:16 PM TotalGB : 50.8708076477051 Press Enter to continue...: Script completed!
Hope this helps someone out there!