Since there is no Content Exchange section for SDK scripts or examples, i'm posting here something that might be useful to other admins:
I've built a small PowerShell script to get rid of superfluous volumes that are polluting our Orion environment. Whenever we add Juniper nodes (or use Network Discovery to fix some), a ton of volumes are added. Using this script, I identify all Juniper devices with specific Volume Caption filter (NOT LIKE '%/da0s%').
It will then offer you to fine grain the selection if needed (if not, simply select all (CTRL-A)):

Then a final confirmation is required:

Here's the code:
# Title: Juniper Volume Cleanup
# By: PLanglois
# Version: 1.1
#
# This script provides a list of volumes for the SolarWinds inventory that are not matching certain criterias, and allow the user to remove them from monitoring.
#TO DO:
# Add progress bar
# Logging
#connect to Orion API
$swis = Connect-Swis -trusted -Hostname 127.0.0.1 #To forward current logged in username/password to server
$volumes = Get-SwisData $swis "SELECT v.NodeID, n.Caption as NodeCaption, n.MachineType, n.SysObjectId, v.VolumeID, v.Index as VolumeIndex, v.Caption as VolumeCaption, v.Type, v.Uri
FROM Orion.Volumes v LEFT JOIN Orion.Nodes n
ON n.NodeID = v.NodeID
WHERE n.SysObjectID LIKE '1.3.6.1.4.1.2636.%' AND v.Caption NOT LIKE '%/da0s%'"
$totalvolumes = $volumes.Count
Write-Host "[INFO] There are $totalvolumes matching the criterias"
IF ($totalvolumes -eq 0) {
write-host "[INFO} No volumes matching your search criteria! You are all set!"}
ELSE {
$selectedVolumes = $volumes | Select-Object * -ExcludeProperty SysObjectID | Out-GridView -PassThru -Title "Select the volumes to remove"
$totalSelectedVolumes = $selectedVolumes.Count
$title = 'Confirmation Needed'
$question = "Do you want to proceed with the removal of $totalSelectedVolumes volumes?"
$choices = New-Object Collections.ObjectModel.Collection[Management.Automation.Host.ChoiceDescription]
$choices.Add((New-Object Management.Automation.Host.ChoiceDescription -ArgumentList '&Yes'))
$choices.Add((New-Object Management.Automation.Host.ChoiceDescription -ArgumentList '&No way Jose!'))
$decision = $Host.UI.PromptForChoice($title, $question, $choices, 1)
IF ($decision -eq 0) {
Write-Host "[INFO] Attempting removal of $totalSelectedVolumes volumes"
$start=[DateTime]::UtcNow
$end=$start.AddMinutes(30)
$removedVolumes = 0
foreach ($volume in $selectedVolumes) {
$volumeToUnmanage = "V:" + $volume.VolumeID
Invoke-SwisVerb $SWIS Orion.Volumes Unmanage @( $volumetounmanage, $start, $end, "false" ) #To workaround issue CORE-17992
Remove-SwisObject $swis $Volume.Uri
$removedVolumes++
}
Write-Host "[INFO] Removed $removedVolumes volumes"
}
else {
Write-Host '[INFO] Cancelled by user'
}
}
Enjoy! 