Also fixed a problem when StartingOffset is too big
(StartingOffset mod 1024 ==> runtime error overflow)
'============================================================================
'
' DETAILS: Check all volumes and partitions for proper alignment
' Tom Hirt <thirt@tcpdump.com>
' Version 1.0
' Available at http://www.TCPDump.com
'
' Known to be compatible on:
' Windows XP (all versions)
' Windows Server 2000
' Windows Server 2003
' Windows Vista (all versions)
' Windows Server 2008
'
' Any questions or updates to the script can be made
' on the forums area of www.TCPDump.com. Please do not contact
' the author directly.
'
'==========================================================================
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colDiskPartitions = objWMIService.ExecQuery _
("Select * from Win32_DiskPartition")
For each objPartition in colDiskPartitions
Dim strDriveLetter: strDriveLetter = PartitionToDrive(objWMIService, objPartition.DeviceID)
Dim strVolumeName: strVolumeName = PartitionToVolumeLabel(objWMIService, objPartition.DeviceID)
Wscript.Echo "Device ID: " & objPartition.DeviceID
Wscript.Echo "=============================================" & vbcr
Wscript.Echo " Partiton Letter: " & strDriveLetter
Wscript.Echo " Volume Name: " & strVolumeName
Wscript.Echo " Number Of Blocks: " & objPartition.NumberOfBlocks
Wscript.Echo " Block Size: " & objPartition.BlockSize & " KB"
Wscript.Echo " Total Volume Size: " & Round( (objPartition.Size/1024/1024/1024), 0) & " GB"
Wscript.Echo " Type: " & objPartition.Type
Wscript.Echo " Starting Offset: " & objPartition.StartingOffset & " (" & objPartition.StartingOffset/1024 & " KB)"
' If ( (objPartition.StartingOffset Mod 1024) = 0) Then
If ( Fix(objPartition.StartingOffset / 1024) = (objPartition.StartingOffset / 1024)) Then
Wscript.Echo " Disk Alignment: Aligned"
If ( (objPartition.StartingOffset / 1024) < 1024 ) Then
Wscript.Echo vbCrLf & " * Please note, this is not necessarly a problem, however we noticed" & _
vbCrLf & " your starting offset is less than the Microsoft recommended size" & _
vbCrLf & " of 1024 KB. Please see Microsoft's KB article 929491 for " & _
vbCrLf & " additional details."
End If
Else
Wscript.Echo " Disk Alignment: NOT ALIGNED!!"
End If
Wscript.Echo ""
Next
Private Function PartitionToDrive(objWMIService, DeviceID)
Dim objLogcialDisks: Set objLogcialDisks = objWMIService.ExecQuery( _
"ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" & DeviceID & _
"'} WHERE AssocClass = Win32_LogicalDiskToPartition")
Dim objLogicalDisk
For Each objLogicalDisk In objLogcialDisks
PartitionToDrive = objLogicalDisk.DeviceID
Exit Function
Next
PartitionToDrive = ""
End Function
Private Function PartitionToVolumeLabel(objWMIService, DeviceID)
Dim objLogcialDisks: Set objLogcialDisks = objWMIService.ExecQuery( _
"ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" & DeviceID & _
"'} WHERE AssocClass = Win32_LogicalDiskToPartition")
Dim objLogicalDisk
For Each objLogicalDisk In objLogcialDisks
PartitionToVolumeLabel = objLogicalDisk.VolumeName
Exit Function
Next
PartitionToVolumeLabel = ""
End Function