As part of this blog series we are sharing PowerShell snippets for a few Computer Management tasks. In this post we will be going over the samples for Computer Hardware management.
The Visual Basic samples for Computer Hardware Management are at: http://msdn.microsoft.com/en-us/library/aa394587(v=vs.85).aspx
The corresponding PowerShell samples are below:
1. Determine how much free memory a computer has:
PS:> # Get Instance of Win32_OperatingSystem
PS:> $os = Get-CimInstance –ClassName Win32_OperatingSystem –Namespace root/cimv2
PS:> # Look for FreePhysicalMemory property
PS:> $os | Select FreePhysicalMemory
2. Determine whether a computer has a DVD drive:
# Look for instances of Win32_CDROMDrive
$insts = Get-CimInstance –ClassName Win32_CDROMDrive –Namespace root/cimv2
# Loop through them and print DeviceID, Description and Name
foreach($inst in $insts)
$inst | Select Name, DeviceID, Description
3. Determine how much RAM is installed in a computer:
PS:> # Get instance of Win32_ComputerSystem
PS:> $inst = Get-CimInstance –ClassName Win32_ComputerSystem
PS:> # Print Name of the System and the Total Physical Memory
PS:> $inst | Select Name, TotalPhysicalMemory
4. Determine if a computer has more than one processor:
PS:> $inst = Get-CimInstance –ClassName Win32_ComputerSystem –Namespace root/cimv2
PS:> # Print Name of the system and Number of Processors
PS:> $inst | Select Name, NumberOfProcessors
5. Determine whether a computer has a PCMCIA slot:
# Use the Win32_PCMCIAController class and check the value of the Count property.
# If Count is 0, then the computer has no PCMCIA slots.
$insts = Get-CimInstance –ClassName Win32_PCMCIAController –Namespace root/cimv2
if($insts -ne $null)
$count = $insts.Count
if($count -eq $null)
$count = 1
Write-Host "Number of PCMCIA slots: $count"
Write-Host "Number of PCMCIA slots: 0"
6. Identify devices that are not working (those marked with an exclamation point icon in Device Manager)?
# Use the Win32_PnPEntity class
# Use the following clause in your WQL query. WHERE ConfigManagerErrorCode <> 0
$query = "Select * from Win32_PnPEntity WHERE ConfigManagerErrorCode <> 0"
$insts = Get-CimInstance -Query $query
# Loop through all such devices and print their information.
$inst | Format-Table -Property @("ClassGuid", "Description", "DeviceID", "Manufacturer", "Name", "PNPDeviceID", "Service")
7. Determine the properties of the mouse used on computer:
# Use the Win32_PointingDevice class.
# This returns the properties of all pointing devices, not just mouse devices.
$insts = Get-CimInstance –ClassName Win32_PointingDevice
# Loop though instances of Win32_PointingDevice and print the properties.
$inst | Format-Table –Property @(“Description", “DeviceID", “DeviceInterface", “DoubleSpeedThreshold", “Handedness", “HardwareType", “InfFileName", “InfSection", “Manufacturer", “Name", “NumberOfButtons", “PNPDeviceID", “PointingType", “QuadSpeedThreshold", “Resolution", “SampleRate", “Synch")
8. Determine the speed of a processor installed in a computer:
# Use the Win32_Processor class and check the value of the MaxClockSpeed property.
$insts = Get-CimInstance –ClassName Win32_Processor –Namespace root/cimv2
$inst | Select ProcessorId, MaxClockSpeed
9. Determine whether a computer is a tower, a mini-tower, a laptop, and so on:
# Use the Win32_SystemEnclosure class and check the value of the ChassisType property.
$colChassis = Get-CimInstance –ClassName Win32_SystemEnclosure –Namespace root/cimv2
# Loop though the collection of chassis
foreach($chassis in $colChassis)
# Look though the Chassis Types
foreach($item in $chassis.ChassisTypes)
Write-Host "Chassis Type: $item"
10. Get the serial number and asset tag of a computer:
# Use the Win32_SystemEnclosure class, and the properties SerialNumber and SMBIOSAssetTag.
$sytemEnclosures = Get-CimInstance –ClassName Win32_SystemEnclosure
$sytemEnclosureCollection = @()
$sytemEnclosureCollection += $sytemEnclosures
foreach($systemEnclosure in $sytemEnclosureCollection)
$systemEnclosure | Select PartNumber, SerialNumber, SMBIOSAssetTag
11. Determine what kind of device is plugged into a USB port:
# Use the Win32_USBHub class and check the Description property.
# This property may have a value such as "Mass Storage Device" or "Printing Support".
$items = Get-CimInstance –ClassName Win32_USBHub –Namespace root/cimv2
foreach($item in $items)
$item | Select DeviceID, PNPDeviceID, Description
12. Determine how many tape drives are installed on a computer:
# Use the class Win32_TapeDrive class and then count the number of instances received.
# If Count = 0, then no tape drives are installed on the computer.
$insts = Get-CimInstance –ClassName Win32_TapeDrive
$count = 0
Write-Host "Number of tape drives = $count"
We will be covering other computer management scenarios in our future posts. If you have any questions please feel free to send them to us.
Vaibhav Chugh [MSFT]
Standards Based Management