Getting some more info about my .vhd and .avhd files.
I often have the need to get more info on the .vhd and .avhd (Snapshots or Differencing) files. I use the below .vbs script to read the info from the file.
Here's a sample output:
C:\VMs\mergetest\>cscript vhdinfo.vbs C:\VMs\mergetest\mergetest\mergetest_23855B6F-070C-426D-82FC-94E2916391EC.avhd
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.
VHDInfo.vbs v1.00 robertvi 091217
Cookie .................... conectix
Feature.................... 2
Format .................... 65536
Creator ................... win
Creator Host OS............ Wi2k
Disk Type.................. Differencing
Saved State................ 0
Dynamic Info
Cookie .................... cxsparse
Parent .................... C:\VMs\mergetest\mergetest\mergetest.vhd
VHDSize 328191
Finished!
The most used info is Parent to identify the Parent of a snapshot
copy and paste the below and save as vhdinfo.vbs
Option Explicit
WScript.Echo "VHDInfo.vbs v1.01 robertvi 091217"
' common consts
Const TypeBinary = 1
' getting file from args (no checks!)
Dim arguments, inFile
Set arguments = WScript.Arguments
inFile = arguments(0)
Dim inByteArray, disktype
inByteArray = readBytes(inFile)
' Basic Footer
'ByteArray2Text(inByteArray)
WScript.Echo "Cookie .................... " & ByteArray2Text(inByteArray,0,8)
WScript.Echo "Feature.................... " & ByteArray2DWORD(inByteArray,8)
WScript.Echo "Format .................... " & ByteArray2DWORD(inByteArray,12)
WScript.Echo "Creator ................... " & ByteArray2Text(inByteArray,28,4)
WScript.Echo "Creator Host OS............ " & ByteArray2Text(inByteArray,36,4)
disktype = ByteArray2DWORD(inByteArray,60)
If disktype = 1 Then WScript.Echo"Disk Type.................. Reserved(deprecated)" End If
If disktype = 2 Then WScript.Echo"Disk Type.................. Fixed" End If
If disktype = 3 Then WScript.Echo"Disk Type.................. Dynamic" End If
If disktype = 4 Then WScript.Echo"Disk Type.................. Differencing" End If
If disktype = 5 Then WScript.Echo"Disk Type.................. Reserved(deprecated)" End If
If disktype = 6 Then WScript.Echo"Disk Type.................. Reserved(deprecated)" End If
If disktype >= 6 Then WScript.Echo"Disk Type.................. Unknown!" End If
'bare with me, if it would be C i would have used switch
WScript.Echo "Saved State................ " & ByteArray2DWORD(inByteArray,84)
'Dynamic Info
If disktype = 3 Then
WScript.Echo vbCrLf & "Dynamic Info"
WScript.Echo "Cookie .................... " & ByteArray2Text(inByteArray,512,8)
End If
If disktype = 4 Then
WScript.Echo vbCrLf & "Dynamic Info"
WScript.Echo "Cookie .................... " & ByteArray2Text(inByteArray,512,8)
WScript.Echo "Parent .................... " & ByteArray2UText(inByteArray,1536,512)
End If
WScript.Echo vbcrlf & "VHDSize " & UBound(inByteArray)
WScript.echo "Finished!"
private function readBytes(file)
dim inStream
' ADODB stream object used
set inStream = WScript.CreateObject("ADODB.Stream")
' open with no arguments makes the stream an empty container
inStream.Open
inStream.type= TypeBinary
inStream.LoadFromFile(file)
readBytes = inStream.Read()
end function
Function ByteArray2Text(varByteArray,offset,lenght)
Dim strBuffer, lngCounter, strData
strData = ""
strBuffer = ""
For lngCounter = offset to offset+lenght-1
strBuffer = strBuffer & Chr(255 And Ascb(Midb(varByteArray,lngCounter + 1, 1)))
Next
ByteArray2Text = strData & strBuffer
End Function
Function ByteArray2UText(varByteArray,offset,lenght)
Dim strBuffer, lngCounter, strData
strData = ""
strBuffer = ""
For lngCounter = offset to offset+lenght-1 Step 2
strBuffer = strBuffer & Chr(255 And Ascb(Midb(varByteArray,lngCounter + 1, 1)))
Next
ByteArray2UText = strData & strBuffer
End Function
Function ByteArray2DWORD(varByteArray,offset)
Dim strBuffer, lngCounter, strData
strData = ""
strBuffer = ""
For lngCounter = 0 to 3
ByteArray2DWORD = ByteArray2DWORD * 256
ByteArray2DWORD = ByteArray2DWORD + Ascb(Midb(varByteArray,offset+ lngCounter + 1, 1))
Next
End Function
'*** End