Область NetBIOS для компьютера в PowerShell

Как я могу получить имя домена NetBIOS ( "короткое" ) текущего компьютера от PowerShell?

$ENV: USERDOMAIN отображает домен текущего пользователя, но я хочу, чтобы домен, членом которого является текущий компьютер.

Я обнаружил, что вы можете сделать это довольно легко в VBScript, но, по-видимому, ADSystemInfo не очень приятно использовать в PowerShell.

Update

Здесь мое окончательное решение, включающее предложение об использовании Win32_NTDomain, но фильтрация на текущий домен машины

$wmiDomain = Get-WmiObject Win32_NTDomain -Filter "DnsForestName = '$( (Get-WmiObject Win32_ComputerSystem).Domain)'"
$domain = $wmiDomain.DomainName

Ответы

Ответ 1

В большинстве случаев доменное имя NetBIOS по умолчанию является самой левой меткой в ​​имени домена DNS до первых 15 байтов (имена NetBIOS имеют ограничение в 15 байт). Доменное имя NetBIOS может быть изменено во время установки Active Directory, но его нельзя изменить.

Объект WMI WIN32_ComputerSystem предоставляет информацию на компьютере под управлением Windows

PS C:\> Get-WmiObject Win32_ComputerSystem

Domain              : WORKGROUP
Manufacturer        : Hewlett-Packard
Model               : HP EliteBook 8530w (XXXXXXXXX)
Name                : ABCHPP2
PrimaryOwnerName    : ABC
TotalPhysicalMemory : 4190388224

Итак, имя домена задается:

PS C:\> (gwmi WIN32_ComputerSystem).Domain

Но при установке домена указывается DNS-имя. В этом случае вы можете использовать команду nbtstat -n, чтобы найти доменное имя NetBIOS, которое отображается следующим образом <DOMAIN><1B>.

Команда PowerShell может быть:

nbtstat -n | Select-String -Pattern "^ *(.*) *<1B>.*$" | % {$_ -replace '^ *(.*) *<1B>.*$','$1'}

Вот еще один способ использования WMI

PS C:\> (gwmi Win32_NTDomain).DomainName

Ответ 2

Используйте env: чтобы получить настройки среды через PowerShell

NetBIOS: $env: userdomain FQDN: $env: userdnsdomain

Чтобы увидеть все значения:

dir env: (no $)

Ответ 3

import-module activedirectory
(Get-ADDomain -Identity (Get-WmiObject Win32_ComputerSystem).Domain).NetBIOSName

Ответ 4

Из Здесь

# Retrieve Distinguished Name of current domain.
$Domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
$Root = $Domain.GetDirectoryEntry()
$Base = ($Root.distinguishedName)

# Use the NameTranslate object.
$objTrans = New-Object -comObject "NameTranslate"
$objNT = $objTrans.GetType()

# Invoke the Init method to Initialize NameTranslate by locating
# the Global Catalog. Note the constant 3 is ADS_NAME_INITTYPE_GC.
$objNT.InvokeMember("Init", "InvokeMethod", $Null, $objTrans, (3, $Null))

# Use the Set method to specify the Distinguished Name of the current domain.
# Note the constant 1 is ADS_NAME_TYPE_1779.
$objNT.InvokeMember("Set", "InvokeMethod", $Null, $objTrans, (1, "$Base"))

# Use the Get method to retrieve the NetBIOS name of the current domain.
# Note the constant 3 is ADS_NAME_TYPE_NT4.
# The value retrieved includes a trailing backslash.
$strDomain = $objNT.InvokeMember("Get", "InvokeMethod", $Null, $objTrans, 3)

Ответ 5

OP находится после "компьютерного домена", поэтому ответ будет $GetComputerDomain (ниже), но я также добавлю $GetUserDomain также для справки.

$GetComputerDomain = ([System.DirectoryServices.ActiveDirectory.Domain]::GetComputerDomain()).Name
$GetUserDomain = ([System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()).Name

Я нахожу параметр wmi (gwmi) чрезвычайно медленным, особенно, когда вы запрашиваете класс Win32_NTDomain. У меня есть многопользовательская доменная среда, и она берет навсегда, когда мне просто нужна эта простая информация быстро.

Ответ 6

Используйте Командлет Active Directory Get-ADDomain:

(Get-ADDomain -Current LocalComputer).NetBIOSName

Ответ 7

Команда powershell работает отлично! Я тестировал несколько различных решений.

Если вы используете следующую команду .Net:

 [System.Net.Dns]::GetHostByAddress('192.168.1.101').hostname

Он работает тоже, но он использует DNS для разрешения, в моем случае у нас есть настройка WINS для поддержки приложения, которое его требует, поэтому не может его использовать. Ниже приводится то, что я использовал в качестве части script, используемой для проверки регистрации WINS для каждого клиента:

$IPAddress = "<enterIPAddress>" (remove brackets, just enter IP address)

(nbtstat -A $IPAddress | ?{$_ -match '\<00\>  UNIQUE'}).Split()[4]

http://social.technet.microsoft.com/Forums/en-US/f52eb2c7-d55d-4d31-ab4e-09d65d366771/how-to-process-cmd-nbtstat-a-ipaddress-output-and-display-the-computer-name-in-powershell?forum=ITCG

В приведенной выше ссылке есть поток и беседа.