- Query SQL using SQL Server Management Studio
select ENT.Name as 'Name', Lower(DNS_Name) as 'DNS Name', Guest_OS as 'OS', Mem_Size_MB as 'Mem', IP_Address as 'IP', VM.FILE_Name as 'VMX location', VM.Suspend_Time as 'Suspend Time', VM.Suspend_Interval as 'Suspend Interval', VMS.Snapshot_Name as 'Snapshot Name', VMS.Snapshot_Desc 'Snapshot Description', DateAdd(Hour, 10, VMS.Create_Time) as 'Snapshot Time', VMS.Is_Current_Snapshot 'Current Snapshot' from vpx_vm VM inner join VPX_GUEST_NET_ADAPTER NET on VM.ID = NET.VM_ID inner join VPX_ENTITY ENT on VM.ID = ENT.ID inner join VPX_SNAPSHOT VMS on VM.ID = VMS.VM_ID - Use sqlcmd.exe to run the query
Run this query from a command-line after updating the server and database parameters:
sqlcmd -S %server% -d %database% -W -s "," -Q "select ENT.Name as 'Name', Lower(DNS_Name) as 'DNS Name', Guest_OS as 'OS', Mem_Size_MB as 'Mem', IP_Address as 'IP', VM.FILE_Name as 'VMX location', VM.Suspend_Time as 'Suspend Time', VM.Suspend_Interval as 'Suspend Interval', VMS.Snapshot_Name as 'Snapshot Name', VMS.Snapshot_Desc 'Snapshot Description', DateAdd(Hour, 10, VMS.Create_Time) as 'Snapshot Time', VMS.Is_Current_Snapshot 'Current Snapshot' from vpx_vm VM inner join VPX_GUEST_NET_ADAPTER NET on VM.ID = NET.VM_ID inner join VPX_ENTITY ENT on VM.ID = ENT.ID inner join VPX_SNAPSHOT VMS on VM.ID = VMS.VM_ID" - Connect to the service console and query for the files in the VMFS volumes
ls -Ral /vmfs/volumes/* grep .vmsn - Use the VI Toolkit to connect to a VC instance and query for snapshots. Note that this is currently in beta, so for write operations in production I suggest waiting for the production release of the toolkit.
- Install VMware-Vim4PS-e.x.p-81531.exe (or later)
- Run this command (or use the start menu shortcut) C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -PSConsoleFile "C:\Program Files\VMware\Infrastructure\VIToolkitForWindows\vim.psc1" -NoExit -Command ". \"C:\Program Files\VMware\Infrastructure\VIToolkitForWindows\init.ps1\"" \
- Get-VC -server %vc-server% (you will be prompted for credentials unless you have a valid certificate path)
- Get-VM Get-Snapshot
Name Description PowerState
---- ----------- ----------
A_Snapshot Test PoweredOff
Note that the output above isn’t very well formed, so I prefer to export the results to a CSV file: - Get-VM Get-Snapshot export-csv -path c:\temp\VMsnapshots.csv
Unfortunately the CSV output exports the the VM object as the object type instead of the properties in the object, so you can also use: - Get-VM Get-Snapshot foreach-object {$out= $_.VM.Name + "," + $_.Name + "," + $_.Description + "," + $_.PowerState; $out}
Notes
- I doubt VMware would recommend querying the database directly, they’d say to use their SDK or the VI toolkit instead of either one or two above.
- The SQL commands above add GMT+10 to the UTC times recorded in the database using DateAdd()
Wayne's World of IT (WWoIT), Copyright 2008 Wayne Martin.
4 comments:
WAYNES WORLD, WAYNES WORLD, PARTY TIME EXCELLENT!
Hello,
the command under 3 has a small error.
It failed the pipe character. Correct would be:
ls -Ral /vmfs/volumes/* | grep .vmsn
Unfortunately, this won't reveal "hidden" snapshots. Instead, you should look for filenames that has *delta* in it, this will always succeed in finding a snapshot, whether it is visible or not.
Here's the powerShell version of the ls solution:
Connect VI-Server localhost
cd vmstore:
cd DataCenter1
get-childitem datastore1 -include *.vmsn -recurse -force
-force includes hidden items. I don't know if it includes the delta files or not. It takes a long time to run, though.
Post a Comment