Get Computername from SerialNumber


I would like to be able to run a script so that I can find out to which Computer a given Serialnumber belongs to.

unfortunately my script doesnt work. Could you guys give me a little input?

I would like to query all computers in my domain /OU


Thank you so much!


Function Get-computername {






Begin {

foreach($computer in $ComputerName){

$sn = Get-WmiObject Win32_Bios -Filter “SerialNumber=’$serial’” -ComputerName $computer


$result = Get-ADComputer -identity $computer

Write-Output “$result”


Process { }

End {}



Get-computername -ComputerName Test1, Test2 -serial SerialTest1


How about something like this

$Servers = "Srv1","Srv1","Srv3"

$GetData = {


BiosInfo = $(Get-WmiObject Win32_Bios)



$Results = Invoke-Command -ComputerName $Servers -ScriptBlock $GetData -ErrorAction SilentlyContinue

$Results | ForEach-Object{

$ComputerName = $_.PSComputerName

$_.BiosInfo |



ComputerName = $ComputerName


Manufacturer = $_.Manufacturer

Name = $_.Name

SerialNumber = $_.SerialNumber

Version = $_.Version



} | sort-object | Export-Excel -Path $xlsxFile -WorkSheetname BIOS -AutoSize -AutoFilter -FreezeTopRow -BoldTopRow


The issue with your original script is that this block:

$result = Get-ADComputer -identity $computer
Write-Output “$result”
is outside the foreach loop. So the $computer variable is only the last element of the loop. In this case it’s Test2. It will output $result for Test2 no matter if matches the serial number or not, and it will never output the info for Test1. Although you’re probably better off with the Invoke-Command as suggested above.

You don’t need loops here, -ComputerName accepts array of string.

Get-CimInstance -ComputerName $ComputerName -Class Win32_Bios -Filter "SerialNumber='$serial'"

The result will be from the relevant computer and unless you need some AD property of the resultant computer, no need to use Get-ADComputer as well.

Thank you!

it works fine with Get-CimInstance!

That’s an easy fix :slight_smile: Thanks

The solution is not actually to use Get-CimInstance, you could achieve it by Get-WmiObject as well, but is not recommend because of various reasons, PS 6.x doesn’t have any -WMI cmdlets available.