WMI and HP Product IDs
An HP Product ID is related to the hardware SKU
The plain-English way of getting the SKU is
Get-WMIObject –ComputerName $computerName Win32_ComputerSystem
However, our inventory system uses the HP product ID property stuffed in ILO. As someone who uses the test lab, this isn’t something that I need to know, but one of the lab admins asked me if there was a way to pull the data. Because he’s on the team that builds out the hardware on which I throw the test bits, it’s a good idea to stay on his good side. After a bit of looking, I find it’s
(Get-WmiObject –ComputerName $ComputerName -Namespace 'Root\HPQ' HP_ComputerSystemChassis).ProductID
Of course, given that I was trying to give a coworker a solution, I added some framing logic:
function Get-HpProductId
{
param (
[parameter(ValueFromPipeline=$true)][string[]]$ComputerName = @($env:Computername)
);
begin
{
$ping = New-Object System.Net.NetworkInformation.Ping;
$problems = @();
}
process
{
try
{
foreach ($_computerName in $ComputerName)
{
if (($ping.Send($_computerName, 1000)).Status -eq 'Success')
{
Get-WmiObject -ComputerName $_computerName -Namespace 'Root\HPQ' -Query 'SELECT ProductID, SerialNumber, __Server from HP_ComputerSystemChassis' -ErrorAction SilentlyContinue |
Select-Object @{
n = 'ComputerName';
e = { $_.__Server; }
}, SerialNumber, ProductID
}
else
{
$problems += $_computerName;
}
}
}
catch
{
Write-Warning "$($MyInvocation.MyCommand.Name) -ComputerName $_computerName returns '$($_.Exception.Message)'";
$problems += $_computerName;
}
}
end
{
$problems |
?{ $_; } |
Sort-Object |
Group-Object |
% {
Write-Warning "$($MyInvocation.MyCommand.Name) failed to ping `t$($_.Name)";
}
}
}