Public/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
 
.Parameter SkipDNS
If you are using public DNS, use SKipDNS. This will prevent long delays caused by retrieving Hostnames.
 
.Parameter Subnet
Specify a local subnet to query
 
.Example
Get-MacVendor -MacAddress 00:00:00:00:00:00
 
.Example
Get-MacVendor -MacAddress 00:00:00:00:00:00,11:11:11:11:11:11
 
.Example
Get Mac addresses for all devices on the local subnet and query their OUI
 
Get-MacVendor -Subnet 192.168.0 | Sort-Object Vendor
#>

    [CmdletBinding(DefaultParameterSetName = 'MacAddress')]
    param(
        [Parameter (Mandatory = $true, ValueFromPipeline = $false, ParameterSetName = 'MacAddress')]
        [ValidatePattern("^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$")]
        [string[]]$MacAddress,
        [Parameter (Mandatory = $true, ParameterSetName = 'Local Subnet')]
        [string]$Subnet,
        [Parameter (Mandatory = $false, ParameterSetName = 'Local Subnet')]
        [switch]$SkipDNS
    )

    if ($null -ne $MacAddress) {
        foreach ($Mac in $MacAddress) {
            try {
                Invoke-RestMethod -Method Get -Uri https://api.macvendors.com/$Mac -ErrorAction SilentlyContinue | ForEach-Object {
                    [pscustomobject]@{
                        Vendor     = $_
                        MacAddress = $Mac
                    }
                }
                Start-Sleep -Milliseconds 1000
            }
            catch {
                Write-Warning -Message "$Mac, $_"
            }
        }
    }

    else {
        Get-NetNeighbor |
        Select-Object LinkLayerAddress, IPAddress |
        Where-Object { ($_.IPAddress -like "*$Subnet*") -and ($_.LinkLayerAddress -ne '00-00-00-00-00-00') -and ($_.LinkLayerAddress -ne 'ff-ff-ff-ff-ff-ff') } |
        ForEach-Object {
            try {
                $Mac = $_.LinkLayerAddress
                $IP = $_.IPAddress

                Invoke-RestMethod -Method Get -Uri https://api.macvendors.com/$Mac -ErrorAction SilentlyContinue |
                ForEach-Object {

                    if ($SkipDNS -eq $false) {
                        $DNS = Resolve-DnsName $IP -QuickTimeout -NoRecursion -ErrorAction 'SilentlyContinue'
                        [pscustomobject]@{
                            Hostname   = $DNS.NameHost
                            IP         = $IP
                            MacAddress = $Mac
                            Vendor     = $_
                        }
                    }

                    else {
                        [pscustomobject]@{
                            IP         = $IP
                            MacAddress = $Mac
                            Vendor     = $_
                        }

                    }
                    Start-Sleep -Milliseconds 1000
                }
            }
            catch {
                Write-Warning -Message "$Mac, $_"
            }
        }
    }
}