I have heard some discussions recently regarding whether Win32_LogicalDisk or Win32_Volume should be used in the answer to event 3 in the Scripting Games.
The problem requires you pull the drive letter, drive size and freespace for local disks on the server. Notice the emphasis – that will be important.
Looking at Win32_Volume
PS> Get-CimClass -ClassName Win32_Volume | select -ExpandProperty CimClassproperties | select Name
Name
—-
Caption
Description
InstallDate
Name
Status
Availability
ConfigManagerErrorCode
ConfigManagerUserConfig
CreationClassName
DeviceID
ErrorCleared
ErrorDescription
LastErrorCode
PNPDeviceID
PowerManagementCapabilities
PowerManagementSupported
StatusInfo
SystemCreationClassName
SystemName
Access
BlockSize
ErrorMethodology
NumberOfBlocks
Purpose
Automount
BootVolume
Capacity
Compressed
DirtyBitSet
DriveLetter
DriveType
FileSystem
FreeSpace
IndexingEnabled
Label
MaximumFileNameLength
PageFilePresent
QuotasEnabled
QuotasIncomplete
QuotasRebuilding
SerialNumber
SupportsDiskQuotas
SupportsFileBasedCompression
SystemVolume
You see 3 properties that might be of use
Get-CimInstance -ClassName Win32_Volume | select DriveLetter, Capacity, FreeSpace
is a start but I get two drives with no capacity & freespace – must by my DVD drives
I can filter those out using drive type. DriveType =3 gives me local disks
So the WMI call I need is
Get-CimInstance -ClassName Win32_Volume -Filter "DriveType=3" | select DriveLetter, Capacity, FreeSpace
Get-WmiObject -Class Win32_Volume -Filter "DriveType=3" | select DriveLetter, Capacity, FreeSpace
Now lets look at Win32_LogicalDisk
PS> Get-CimClass -ClassName Win32_Logicaldisk | select -ExpandProperty CimClassproperties | select Name
Name
—-
Caption
Description
InstallDate
Name
Status
Availability
ConfigManagerErrorCode
ConfigManagerUserConfig
CreationClassName
DeviceID
ErrorCleared
ErrorDescription
LastErrorCode
PNPDeviceID
PowerManagementCapabilities
PowerManagementSupported
StatusInfo
SystemCreationClassName
SystemName
Access
BlockSize
ErrorMethodology
NumberOfBlocks
Purpose
FreeSpace
Size
Compressed
DriveType
FileSystem
MaximumComponentLength
MediaType
ProviderName
QuotasDisabled
QuotasIncomplete
QuotasRebuilding
SupportsDiskQuotas
SupportsFileBasedCompression
VolumeDirty
VolumeName
VolumeSerialNumber
I can’t find a DriveLetter but I know that DeviceId supplies that information – if in doubt check by displaying all properties of one instance or do this
PS> Get-CimInstance -ClassName Win32_Logicaldisk | ft -a
DeviceID DriveType ProviderName VolumeName Size FreeSpace
——– ——— ———— ———- —- ———
C: 3 249951154176 146292559872
D: 3 System Reserved 104853504 69279744
E: 2
F: 5
Drivetype matches with Win32_Volume so we get
Get-CimInstance -ClassName Win32_Logicaldisk | Select Deviceid, Size, FreeSpace
Get-WmiObject -Class Win32_Logicaldisk | Select Deviceid, Size, FreeSpace
You’ll have noticed that D: has a volume name of System Reserved. This means its a system disk that you shouldn’t be touching. Technically the event asked for information on local disks so it should be included. I know that some purists will argue against this so to remove the system volume you can
PS> Get-CimInstance -ClassName Win32_Volume -Filter "DriveType=3 AND SystemVolume = $false" | select DriveLetter, Capacity, FreeSpace
or
PS> Get-CimInstance -ClassName Win32_Logicaldisk -Filter "DriveType = 3 AND VolumeName <> ‘System Reserved’" | select DeviceId, Size, FreeSpace
So either will give you the results you need. You just need to dig into the classes a bit.