среда, 26 августа 2015 г.

Powershell. Как узнать аппаратный адрес своей сетевой карты

  Стоит задача: средствами Powershell узнать аппаратный адрес своей сетевой карты. Он же физический-, он же MAC-адрес.
  В обычной командной строке Windows это делается двумя методами:
  1. "getmac".
  2. "ipconfig /all" показывает настройки всех сетевых адаптеров твоей машины. Искать для каждого адаптера раздел "Физический адрес"
  В Powershell нам поможет командлет "Get-NetAdapter" который показывает имя каждого интерфейса, его описание, аппаратный адрес и скорость на интерфейсе. С помощью такой вот комбинации "(Get-NetAdapter).MACAddress" показываются только аппаратные адреса без всего прочего.
  Мне для скрипта надо было узнать MAC моей работающей сетевой карты и исключить разные не работающие адаптеры. Описание командлета Get-NetIPConfiguration сказало что он возвращает инфу только работающих не-виртуальных интерфейсов данного компа. Дословно "this cmdlet gets IP configuration properties for all non-virtual connected interfaces on a computer".
  Я реализовал задачу двумя командлетами.

$InterfaceAlias=(Get-NetIPConfiguration).InterfaceAlias
$HWAddr=(Get-NetAdapter | Where-Object{$_.ifAlias -eq $InterfaceAlias}).MACAddress

  На выходе в переменной $HWAddr находится физический адрес. В первой строке переменная $InterfaceAlias получает название работающего интерфейса, а во второй строке по имени интерфейса ищется его аппаратный адрес.
  Можно попробовать проще.
$HWAddr=(Get-NetAdapter).MACAddress | Select-Object -First 1

  Но я не уверен что этот вариант будет всегда работать корректно.
  Так же найден способ узнать MAC адрес другого компьютера.