Public/Network/Get-MacVendor.ps1
function Get-MacVendor { <# .SYNOPSIS Resolve MacAddresses To Vendors .DESCRIPTION This Function Queries The MacVendors API With Supplied MacAdderess And Returns Manufacturer Information If A Match Is Found .PARAMETER MacAddress MacAddress To Be Resolved .EXAMPLE Get-MacVendor -MacAddress 00:00:00:00:00:00 .EXAMPLE Warning ! ! This may error due to api limits Get-DhcpServerv4Lease -ComputerName $ComputerName -ScopeId $ScopeId | Select -ExpandProperty ClientId | Foreach-Object {Get-MacVendor -MacAddress $_; sleep 1} Get-NetAdapter | select -ExpandProperty MacAddress | Foreach-Object {Get-MacVendor -MacAddress $_; sleep 1} .EXAMPLE Get-MacVendor -MacAddress 00-09-0F-AA-00-01, B8-31-B5-3D-75-D1, 00-09-0F-FE-00-01, F0-6E-0B-DA-B6-A7, F0-6E-0B-DA-B6-A8 Would return MacAddress Vendor ---------- ------ 00-09-0F-AA-00-01 Fortinet Inc. B8-31-B5-3D-75-D1 Microsoft Corporation 00-09-0F-FE-00-01 Fortinet Inc. F0-6E-0B-DA-B6-A7 Microsoft Corporation F0-6E-0B-DA-B6-A8 Microsoft Corporation .NOTES Originally published as script Get-MacVendor.ps1 on PSGallery * added write-verbose * removed a-f in regex as case insensitive by default * added example * moved validate regex further into script and used Format-MacAddress to clean up addresses that don't match pattern like those seen on switches (ex. 34fcb9-c08bce) #> [CmdletBinding()] param( [Parameter (Mandatory, HelpMessage = 'Please enter a 12 character hexadecimal MAC address optionally delimited with either : or -')] #[ValidatePattern('^([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$')] [string[]] $MacAddress ) begin { Write-Invocation $MyInvocation $CurrentMac = 0 } process { foreach ($Mac in $MacAddress) { if ($Mac -notmatch '^([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$') { $Mac = Format-MacAddress -MacAddress $Mac -Case Upper } $CurrentMac++ Write-Progress -Activity "Resoving MacAddress : $Mac" -Status "$CurrentMac of $($MacAddress.Count)" -PercentComplete (($CurrentMac / $MacAddress.Count) * 100) try { Out-Verbose 'Sending Request to https://api.macvendors.com/' Invoke-RestMethod -Method Get -Uri https://api.macvendors.com/$Mac -ErrorAction SilentlyContinue | ForEach-Object { New-Object -Type pscustomobject -prop ([ordered] @{ MacAddress = $Mac Vendor = $_ }) } Start-Sleep -Milliseconds 1000 } catch { New-Object -Type pscustomobject -prop ([ordered] @{ MacAddress = $Mac Vendor = 'UNKNOWN' }) Start-Sleep -Milliseconds 1000 } } } end { Out-Verbose $fxn "Complete." } } |