What is VMware snapshot ?
A VMware snapshot is a copy of the virtual machine’s disk file (VMDK) at a given point in time. Snapshots provide a change log for the virtual disk and are used to restore a VM to a particular point in time when a failure or system error occurs.
Snapshot details powerCLI script :
Open the PowerCLI icon (Run as Administrator) and you can execute commands manually, run scripts manually or automate your scripts with Task Scheduler (see below).
Function Test-Cred{ Param ($cred) $username = $cred.username $password = $cred.GetNetworkCredential().password # Get current domain using logged-on user's credentials $CurrentDomain = "LDAP://" + ([ADSI]"").distinguishedName $domain = New-Object System.DirectoryServices.DirectoryEntry($CurrentDomain,$UserName,$Password) if ($domain.name) { return "TRUE" } else { return "FALSE" } } Clear-Host del *.csv Set-ExecutionPolicy RemoteSigned Set-ExecutionPolicy Unrestricted $outfile="" $vc = "SvrList.txt" $i=0 $j=0 $k=0 $l=0 $prodflag=0 $drflag=0 $uatflag=0 $prodCreds="NULL" $DrCreds="NULL" $uatCreds="NULL" $vcnt = (Get-Content $vc).Count Get-Content $vc | ForEach-Object { # Write-Host $_ If ( $_ | Select-String -Pattern "prod.test.com") { # Write-Host " Server : $_ belongs To prod Domain" $prodflag=1 } if ($_ | Select-String -Pattern "uat.test.com") { # Write-Host " Server : $_ belongs To uat Domain" $drflag=1 } if ($_ | Select-String -Pattern "dr.test.com") { # Write-Host " Server : $_ belongs To dr Domain" $uatflag=1 } } if($prodflag -eq 1) { Write-Host " You need to provide Creds for prod Domain" $prodCreds=$host.ui.PromptForCredential("Need credentials", "Please enter your user name and password.", "", "NetBioUserName") $flag=Test-Cred($prodCreds) if ($flag -eq "TRUE") { Write-Host " Authentication Successful For prod Domain" -f green } else { Write-Host " Authentication Failed For prod Domain .... exiting" -f green exit } } if($uatflag -eq 1) { Write-Host " You need to provide Creds for uat Domain" $uatCreds=$host.ui.PromptForCredential("Need credentials", "Please enter your user name and password.", "", "NetBioUserName") $flag=Test-Cred($uatCreds) if ($flag -eq "TRUE") { Write-Host " Authentication Successful For uat Domain" -f green } else { Write-Host " Authentication Failed For uat Domain .... exiting" -f green exit } } if($drflag -eq 1) { Write-Host " You need to provide Creds for DR Domain" $drCreds=$host.ui.PromptForCredential("Need credentials", "Please enter your user name and password.", "", "NetBioUserName") $username = $drCreds.username $password = $drCreds.GetNetworkCredential().password # Get current domain using logged-on user's credentials $CurrentDomain = "LDAP://" + ([ADSI]"").distinguishedName $domain = New-Object System.DirectoryServices.DirectoryEntry($CurrentDomain,$UserName,$Password) if($domain) { Write-Host " Authentication Successful For dr Domain" -f green } else { Write-Host " Authentication Failed For dr Domain .... exiting" -f green exit } } Get-Content $vc | ForEach-Object { $vcenter=$_ $outfile = ".\$($vcenter).csv" try { $bestping = (Test-Connection -ComputerName $vcenter -Count 10 -ErrorAction STOP | Sort ResponseTime)[0].ResponseTime } catch { Write-Warning $_.Exception.Message $bestping = "Unable to connect" continue } if ($bestping -eq "Unable to connect") { Write-Host "Unable to connect to $vcenter ..... Skipping" -f cyan exit } try{ Write-Host "Connecting to vCenter : $vcenter, please wait.." -f blue if ($vcenter | Select-String -Pattern "dr.test.com") { Connect-ViServer -server $vcenter -Credential $drCreds| Out-Null } elseif ($vcenter | Select-String -Pattern "uat.test.com") { Connect-ViServer -server $vcenter -Credential $uatCreds| Out-Null } elseif ($vcenter | Select-String -Pattern "prod.test.com") { Connect-ViServer -server $vcenter -Credential $prodCreds| Out-Null } } catch{ #Write-Warning $_.Exception.Message $exception = $_.Exception # Write-debug "Could not connect to vCenter" Write-Host "Exiting ....." -f red exit } Write-Host " Connected. " -f green Write-Host "Processing $vcenter" $i++ $j=0 $k=0 $l=0 try{ Write-Progress -Activity "Scanning vCenter .... " -Status ("vCenter : {0}" -f $vcenter) -PercentComplete ($i/$vcnt*100) -Id 0 } catch [System.DivideByZeroException]{ } $outfile=$vcenter+".csv" $dcs=Get-Datacenter $data=foreach( $dc in $dcs) { $j++ $k=0 $l=0 $clusters = $dc | Get-Cluster try{ Write-Progress -Activity "Scanning DataCenter .... " -Status ("Datacenter : {0}" -f $dc.Name) -PercentComplete ($j/$dcs.count*100) -Id 1 } catch [System.DivideByZeroException]{ } foreach($cluster in $clusters) { $k++ $l=0 try{ Write-Progress -Activity " Scanning Clusters .... " -Status ("Cluster : {0}" -f $cluster.Name) -PercentComplete ($k/$clusters.count*100) -Id 2 } catch [System.DivideByZeroException]{ } $vms = $cluster | Get-VM $result = $vms | Get-Snapshot if (!$result) { # Write-Host "No Snapshots in Cluster : $cluster.Name" continue } foreach ($snap in $result) { $l++ <# try{ Write-Progress -Activity " Processing SnapShot info .... " -Status ("Cluster : {0}" -f $snap) -PercentComplete ($l/$clusters.count*100) -Id 2 } catch [System.DivideByZeroException]{} #> $snapevent = Get-VIEvent -Entity $snap.VM -Types Info -Finish $snap.Created -MaxSamples 1 | Where-Object {$_.FullFormattedMessage -imatch 'Task: Create virtual machine snapshot'} if ($snapevent -ne $null) { Write-Host ( "VM: "+ $snap.VM + ". Snapshot '" + $snap + "' created on " + $snap.Created.DateTime + " by " + $snapevent.UserName +".") } else { Write-Host ("VM: "+ $snap.VM + ". Snapshot '" + $snap + "' created on " + $snap.Created.DateTime + ". This event is not in vCenter events database") $snapevent.UserName = "This event is not in vCenter events database" } New-Object PSObject -Property @{ VCenter = $vcenter DataCenter = $dc Cluster = $cluster.name EsxHost = $snap.VM.Host VMName = $snap.VM PowerState = $snap.PowerState SnapshotName = $snap SizeGB = $snap.SizeGB Description = $snap.Description # Filename DateCreated = $snap.Created.DateTime CreatedBy = $snapevent.UserName Quiesced = $snap.Quiesced } | Select VCenter,Datacenter,Cluster,EsxHost,VMName,PowerState,SnapshotName,SizeGB,Quiesced,Description,DateCreated,CreatedBy } } } # } $data | Export-Csv $outfile -NoTypeInformation Write-Host "Disconnecting from vCenter : $vcenter" Disconnect-VIServer $vcenter -confirm:$false | Wait-Task | out-null # Wait-Task -Task $task Write-Host "Processing Done Dumping : $outfile " -f green } <# Write-Host "Finalizing ......" -f cyan $swp = @() ls *.csv | %{ $tmp = Import-CSV $_ $swp += $tmp } $swp | Export-CSV .\All-vCenter-SnapInfo.csv -NoTypeInformation Write-Host "Completed....Please Check the Generated : All-vCenter-Info.csv" -f cyan #>
Thanks hope you like it.
Rajiv Pandey.