2011-04-27 85 views
15

如何從PowerShell獲取當前計算機的NetBIOS(又名'short')域名?PowerShell中的計算機的NetBIOS域

$ ENV:USERDOMAIN顯示當前用戶的域,但我想要當前機器所屬的域。

我發現你可以做到pretty easily in VBScript,但在PowerShell中顯然是ADSystemInfo isn't very nice to use

更新

這裏是我結合使用Win32_NTDomain的建議最終解決方案,但過濾到當前計算機域中

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

回答

17

在大多數情況下,默認的NetBIOS域名是DNS域n中最左邊的標籤最多15個字節(NetBIOS名稱有15個字節的限制)。 NetBIOS域名可能會在安裝Active Directory期間更改,但不能更改。

的的Win32_ComputerSystem WMI對象給出了在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 
+0

我已經嘗試過這種方法,它不工作。 '域'屬性不是我所追求的短/ NetBIOS名稱。這包含完整的AD域名 – 2011-04-27 07:13:40

+0

你完全正確,所以我編輯了我的答案。 – JPBlanc 2011-04-27 07:44:38

+0

我試過這個,對於我的它顯示爲<1E>(而不是<1B>) – 2011-04-27 14:22:17

2

Here

# 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) 
4
import-module activedirectory 
(Get-ADDomain -Identity (Get-WmiObject Win32_ComputerSystem).Domain).NetBIOSName 
3

OP後是 「計算機領域」,所以答案應該是$GetComputerDomain(下同),但我將添加$ GetUserDomain以供參考。

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

我發現wmi(gwmi)選項非常慢,特別是當您查詢Win32_NTDomain類時。我有一個多受信任的域環境,當我只需要這個簡單的信息時,它就永遠需要。

+1

對不起,這不是我以前的結果。這些都返回完整的DNS風格的域名。我是在短/ NetBIOS風格的域名之後。 – 2012-05-27 06:55:05

8

使用ENV:通過PowerShell的

的NetBIOS獲得環境設置:$ ENV:USERDOMAIN FQDN:$ ENV:USERDNSDOMAIN

要查看所有值:

DIR ENV:(無$ )

+1

這個答案已經在我的問題中提到過了。它不會返回計算機的域名(這正是我所要求的) – 2013-01-31 09:50:27

+0

有'USERDOMAIN'和'USERDNSDOMAIN'。第二個爲我的任務做了工作。 – Andreas 2013-03-20 10:59:36

+0

謝謝!這是我正在尋找的答案。 – lesca 2017-07-31 02:12:13

0

下面的powershell命令很好用!我嘗試過各種解決方案後進行測試

如果您使用以下.NET命令:

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

它也能工作,但它使用DNS解析,在我的情況,我們有WINS設置的支持,需要它的應用程序,所以能不會使用它。下面是我最終使用的腳本我用它來檢查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

上面的鏈接有螺紋和對話。

1

使用Active Directory Cmdlet的獲取,ADDomain:

(Get-ADDomain -Current LocalComputer).NetBIOSName 
+0

這看起來像@薩沙的回答上的變化 – 2015-09-03 04:36:16

+0

是的,它是相似的。我的鍵盤按鍵少了:) – Jez 2015-09-08 00:06:43

+0

哈!嗯,我想這是真的,你只有有限的人使用了http://keysleft.com/ :-) – 2015-09-08 01:49:59

相關問題