Public/Remove-RubrikUnmanagedObject.ps1
#Requires -Version 3 function Remove-RubrikUnmanagedObject { <# .SYNOPSIS Removes one or more unmanaged objects known to a Rubrik cluster .DESCRIPTION The Remove-RubrikUnmanagedObject cmdlet is used to remove unmanaged objects that have been stored in the cluster In most cases, this will be on-demand snapshots that are associated with an object (virtual machine, fileset, database, etc.) .NOTES Written by Chris Wahl for community usage Twitter: @ChrisWahl GitHub: chriswahl .LINK https://rubrik.gitbook.io/rubrik-sdk-for-powershell/command-documentation/reference/remove-rubrikunmanagedobject .EXAMPLE Get-RubrikUnmanagedObject | Remove-RubrikUnmanagedObject This will remove all unmanaged objects from the cluster .EXAMPLE Get-RubrikUnmanagedObject -Type 'WindowsFileset' | Remove-RubrikUnmanagedObject -Confirm:$false This will remove any unmanaged objects related to filesets applied to Windows Servers and supress confirmation for each activity .EXAMPLE Get-RubrikUnmanagedObject -Status 'Unprotected' -Name 'Server1' | Remove-RubrikUnmanagedObject This will remove any unmanaged objects associated with any workload named "Server1" that is currently unprotected .EXAMPLE Get-RubrikUnmanagedObject -Name 'Server1' -Server1 | Remove-RubrikUnmanagedObject -Force This will remove any unmanaged objects associated with any workload named "Server1" that is currently unprotected. If snapshots are currently assigned to a retention SLA they will be automatically unprotected and deleted. #> [CmdletBinding(SupportsShouldProcess = $true,ConfirmImpact = 'High')] Param( # The id of the unmanaged object. [Parameter(Mandatory = $true,ValueFromPipelineByPropertyName = $true)] [Alias('objectId')] [String]$id, # The type of the unmanaged object. This may be VirtualMachine, MssqlDatabase, LinuxFileset, or WindowsFileset. [Parameter(Mandatory = $true,ValueFromPipelineByPropertyName = $true)] [Alias('objectType')] [String]$Type, # Forces object to be removed regardless of SLA Domain assignment. From Rubrik CDM 5.0 and above, an unmanaged object cannot be deleted if snapshots exist with an SLA Domain assigned to them. The -Force parameter will override this allowing the object, and the snapshots, to be deleted. [Switch]$Force, # Rubrik server IP or FQDN [String]$Server = $global:RubrikConnection.server, # API version [String]$api = $global:RubrikConnection.api ) Begin { # The Begin section is used to perform one-time loads of data necessary to carry out the function's purpose # If a command needs to be run with each iteration or pipeline input, place it in the Process section # Check to ensure that a session to the Rubrik cluster exists and load the needed header data for authentication Test-RubrikConnection # API data references the name of the function # For convenience, that name is saved here to $function $function = $MyInvocation.MyCommand.Name # Retrieve all of the URI, method, body, query, result, filter, and success details for the API endpoint Write-Verbose -Message "Gather API Data for $function" $resources = Get-RubrikAPIData -endpoint $function Write-Verbose -Message "Load API data for $($resources.Function)" Write-Verbose -Message "Description: $($resources.Description)" } Process { if ($PSCmdlet.ShouldProcess("$id", "Remove Unmanaged Object and all snapshots")) { # if force is specified and CDM is > 5.0 remove SLA domain from snapshots first if ($Force -and 5 -le [float]$rubrikconnection.version.substring(0,3)) { Write-Verbose -Message "Force parameter specified. Removing SLA Domain from existing snapshots" $snapshots = Invoke-RubrikRestCall -api 'internal' -Endpoint "unmanaged_object/$id/snapshot" -Method "GET" -Query @{"unmanaged_snapshot_type"="OnDemand"} if ( $snapshots.total -ne 0 ) { Write-Verbose -Message "Assigning UNPROTECTED SLA Domain to snapshot ids: $($snapshots.data.id)" $snapshotarray = New-Object -TypeName System.Collections.Generic.List[String] $snapshots.data.id | ForEach-Object { $snapshotarray.Add($_)} $body = New-Object -TypeName PSObject -Property @{"slaDomainId"="UNPROTECTED";"snapshotIds"=$snapshotarray} Invoke-RubrikRestCall -Endpoint 'unmanaged_object/snapshot/assign_sla' -Method "POST" -api "internal" -Body $body } } $uri = New-URIString -server $Server -endpoint ($resources.URI) $uri = Test-QueryParam -querykeys ($resources.Query.Keys) -parameters ((Get-Command $function).Parameters.Values) -uri $uri $body = New-BodyString -bodykeys ($resources.Body.Keys) -parameters ((Get-Command $function).Parameters.Values) $result = Submit-Request -uri $uri -header $Header -method $($resources.Method) -body $body $result = Test-ReturnFormat -api $api -result $result -location $resources.Result $result = Test-FilterObject -filter ($resources.Filter) -result $result return $result } } # End of process } # End of function |