1 Reply Latest reply on Apr 25, 2016 8:17 AM by pezh0re

    Display and remove snapshots from vCloud Director 5.1

    crispyire Novice

      Hi All,


      I've been trying without success to create a PowerCLI script that will report back and delete all snapshot over x days.


      If I run the vSphere 5.5 PowerCLI commands:


      Get-VM | Get-Snapshot | Where { $_.Created -lt (Get-Date).AddDays(-15)}


      I get a list of snapshots that are over 15 days (for example).

      My understanding is that if use this script as the basis for the 'Remove-Snapshot', it will 'break' vCloud Director so that is off the cards.


      As there doesn't seem to be any native PowerCLI commands to deal with snapshots in vCloud Director 5.1, I altered the command above with help from the module from GeekAfterFive - Infrastructure as Code (I'm told that the API hasn't changed from 1.5 to 5.1)

      If I rerun the command as such:

      Get-CIVM | Get-CISnapshot | Where { $_.Created -lt (Get-Date).AddDays(-15)}

      I get the error message:

      + $streamReader = new-object System.IO.StreamReader($response.getResponseStream <<<< ())

      + CategoryInfo          : InvalidOperation: (getResponseStream:String) [],    RuntimeException

      + FullyQualifiedErrorId : InvokeMethodOnNull



      You cannot call a method on a null-valued expression.

      Any help would be greatly appreciated!



        • 1. Re: Display and remove snapshots from vCloud Director 5.1
          pezh0re Novice

          I hate to bump an old thread - but I'm working on this exact issue. I tried leveraging Get-CIVM - but it's super slow for the 2k VMs in our org.


                  [PSCredential] $systemAdmin,
                  [String] $CIServer= "vCloud.corp.local",
                  $maxAge = 60,
                  $targetOrg = "devcloud"
              Write-Verbose "Importing Modules"
                 Import-Module vmadmin -Verbose:$False -Debug:$False
                  Write-Host "$($_ |select -ExpandProperty Exception)"
              if (!$systemAdmin) { $systemAdmin = get-credential -Message "zId" }
                  Write-Verbose "Connecting to vCloud $CIServeras $($systemAdmin.username)"
                  $connected = Connect-CIServer $CIServer-Credential $systemAdmin -ErrorAction Stop -Verbose:$False -Debug:$False
                  Write-Host "Cannot connect to vCloud server."
              Write-Verbose "Getting all CIVMs... this could take a while"
              # Get all the CIVMs in the target org
              $myCIVMs = Get-CIVM -Org $TargetOrg -Verbose:$False -Debug:$False # -Owner $eId.UserName
              # Determine our max age based on today
              $now = Get-Date
              $maxSnapshotAge = $now.AddDays(-$maxAge)
              $removalCandidates = @()
              Write-Verbose "Finding VMs in all vCloud vApps with Snapshots older than $maxAge"
              foreach ($myVM in $myCIVMs)
                  Write-Progress -Activity "Analyzing vApps" -Status "vApp $($myVM.Name): ($($myCIVMs.IndexOf($myVM)) of $($myCIVMs.length)"
                  $snaps = $myVM | Get-CISnapshot -Verbose:$False -Debug:$False
                  if ($snaps.Created -ge $maxSnapshotAge)
                      $candidate = [PSObject]@{
                                      Snap = $snaps
                                      myVM = $myVM
                      $removalCandidates += $candidate
              Write-Debug "Anything Else?"


          I'm currently working on a much faster way - leveraging Get-View limiting to the vCenter resource pool for the target org and working backwards to civm objects - but this is presenting its own challenges. (Note that vmadmin is a module with the Get-CISnapshot function).