Get-WMIObject Win32_LogicalDisk | Format-Table Name, FreeSpace |
The trick is to use casting and WMI paths. The following line will provide specifically the C: drive:
[wmi]'Win32_LogicalDisk="C:"' | Format-Table Name, Freespace -autosize |
To simply get the free bytes, use this:
([wmi]'Win32_LogicalDisk="C:"').FreeSpace |
What happens here is a simple conversion. You specify text, then you ask PowerShell to convert it to a WMI object using [wmi], which is actually is a type accelerator, a shortcut. This is a way to find out the real .NET type it refers to:
[wmi].FullName |
Of course, PowerShell cannot convert any string to a WMI object. You will need to specify the exact WMI object path, which is unique for each WMI object and contains the class name and so called key properties. Here is how you find out the object path for a Service:
Get-WmiObject Win32_Service | Format-Table Name, __Path -wrap |
You can omit the PC name and WMI namespace for local objects in the standard WMI namespace. So to access a given Service directly, do this:
[wmi]'Win32_Service="WSearch"' | Format-List * |
Why not use Get-Service? You could, but WMI is returning a lot more information about a service:
Get-Service WSearch | Format-List * |