web-dev-qa-db-ja.com

PowerShellのコンピューターのNetBIOSドメイン

PowerShellから現在のコンピューターのNetBIOS(別名「短い」)ドメイン名を取得するにはどうすればよいですか?

$ ENV:USERDOMAINは現在のユーザーのドメインを表示しますが、現在のマシンがメンバーになっているドメインが必要です。

私はあなたがそれを行うことができることを発見しました VBScriptではかなり簡単です ですが、PowerShellでは明らかに ADSystemInfoはあまり使いません です。

更新

これが Win32_NTDomain を使用するという提案を組み込んだ私の最終的な解決策ですが、現在のマシンのドメインにフィルタリングします

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

ほとんどの場合、デフォルトのNetBIOSドメイン名は、最初の15バイトまでのDNSドメイン名の左端のラベルです(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
19
JPBlanc

使用する env: PowerShellを介して環境設定を取得する

NetBIOS:$env:userdomain

FQDN:$env:userdnsdomain

すべての値を表示するには:

dir env:  (no $)
9
user2027763
import-module activedirectory
(Get-ADDomain -Identity (Get-WmiObject Win32_ComputerSystem).Domain).NetBIOSName
4
Sascha P.

OPは「コンピュータドメイン」の後にあるため、答えは$GetComputerDomain(下記)ですが、参照用に$ GetUserDomainも追加します。

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

特にWin32_NTDomainクラスをクエリしているとき、wmi(gwmi)オプションが非常に遅いことがわかりました。私は複数の信頼されたドメイン環境を使用しており、その単純な情報をすばやく必要とするだけでは永遠にかかります。

3

から ここ

# 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)
2
Mike Shepard

Active DirectoryコマンドレットGet-ADDomainを使用します。

(Get-ADDomain -Current LocalComputer).NetBIOSName
1
Jez

NetGetJoinInformationおよびP/Invokeの使用:

Add-Type -MemberDefinition @"
[DllImport("netapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern uint NetApiBufferFree(IntPtr Buffer);
[DllImport("netapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern int NetGetJoinInformation(
  string server,
  out IntPtr NameBuffer,
  out int BufferType);
"@ -Namespace Win32Api -Name NetApi32

function GetDomainName {
  $pNameBuffer = [IntPtr]::Zero
  $joinStatus = 0
  $apiResult = [Win32Api.NetApi32]::NetGetJoinInformation(
    $null,               # lpServer
    [Ref] $pNameBuffer,  # lpNameBuffer
    [Ref] $joinStatus    # BufferType
  )
  if ( $apiResult -eq 0 ) {
    [Runtime.InteropServices.Marshal]::PtrToStringAuto($pNameBuffer)
    [Void] [Win32Api.NetApi32]::NetApiBufferFree($pNameBuffer)
  }
}
0
Bill_Stewart

以下の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

上記のリンクにはスレッドと会話があります。

0
ez4sheezee

これは、.NETフレームワーク(WMIよりもはるかに高速)を使用して行うこともできます。

PS > [System.Net.NetworkInformation.IPGlobalProperties]::GetIPGlobalProperties()

戻ります

HostName      : SurfaceBook
DomainName    : mydomain.com
NodeType      : Hybrid
DhcpScopeName :
IsWinsProxy   : False
0
Eric Herlitz