вторник, 1 сентября 2015 г.

Powershell. Как узнать NETBIOS имя компьютера по IP адресу

  Я уже разобрался как средствами Powershell найти аппаратный адрес своей сетевой карты и как Powershell-ом найти аппаратный адрес другого компьютера.
  Сейчас используя Powershell надо по IP-адресу в локальной сети найти NETBIOS-имя и группу машины.

Ищем имя

  Задача поиска имени удаленного компьютера решается одной командой. Переменная $IP содержит АйПи адрес другого компа.
  Resolve-DNSName -Name $IP -LlmnrNETBIOSOnly
   Только имя без всего лишнего получаем так:
  (Resolve-DNSName -Name $IP -LlmnrNETBIOSOnly).NameHost
  Я не нашел командлет который дает и группу.

Ищем имя и группу

  Для решения этой задачи пришлось анализировать вывод команды "nbtstat -A IP-адрес". Комп должен быть в той же локалке что и мы.
  Функция Get-NBTNames получает IP, а возвращает имя и группу другого компьютера. Или если не находит, то вернет пустые строки.

Function Get-NBTNames ($IP) {
  $NETBIOS_Name=""
  $NETBIOS_Group=""
  $Cmd_Nbtstat_Out=nbtstat -A $IP
  if ( ($Cmd_Nbtstat_Out | Select-String(" <00> ")).Count -gt 0) {
    $NETBIOS_Name=$Cmd_Nbtstat_Out  | Where-Object {$_.Contains("<00>  Уникальный")} | Select-Object -First 1
    if($NETBIOS_Name -ne $NULL) {
      $NETBIOS_Name=$NETBIOS_Name.Substring(4,15)
      $NETBIOS_Group=($Cmd_Nbtstat_Out | Where-Object {$_.Contains("<00>  Группа")} | Select-Object -First 1)
      if($NETBIOS_Group -ne $NULL) {
        $NETBIOS_Group=$NETBIOS_Group.Substring(4,15)
      }
    }

  }
  $NETBIOS_Name
  $NETBIOS_Group
}

  В результатах nbtstat скрипт ищет тип "Уникальный" с кодом 00 (два нуля) и считает это именем компьютера. А тип "Группа" с тем же кодом 00 считается группой.