PowerShellから現在のコンピューターのNetBIOS(別名「短い」)ドメイン名を取得するにはどうすればよいですか?
$ ENV:USERDOMAINは現在のユーザーのドメインを表示しますが、現在のマシンがメンバーになっているドメインが必要です。
私はあなたがそれを行うことができることを発見しました VBScriptではかなり簡単です ですが、PowerShellでは明らかに ADSystemInfoはあまり使いません です。
更新
これが Win32_NTDomain を使用するという提案を組み込んだ私の最終的な解決策ですが、現在のマシンのドメインにフィルタリングします
$wmiDomain = Get-WmiObject Win32_NTDomain -Filter "DnsForestName = '$( (Get-WmiObject Win32_ComputerSystem).Domain)'"
$domain = $wmiDomain.DomainName
ほとんどの場合、デフォルトの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
使用する env:
PowerShellを介して環境設定を取得する
NetBIOS:$env:userdomain
FQDN:$env:userdnsdomain
すべての値を表示するには:
dir env: (no $)
import-module activedirectory
(Get-ADDomain -Identity (Get-WmiObject Win32_ComputerSystem).Domain).NetBIOSName
OPは「コンピュータドメイン」の後にあるため、答えは$GetComputerDomain
(下記)ですが、参照用に$ GetUserDomainも追加します。
$GetComputerDomain = ([System.DirectoryServices.ActiveDirectory.Domain]::GetComputerDomain()).Name
$GetUserDomain = ([System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()).Name
特にWin32_NTDomainクラスをクエリしているとき、wmi(gwmi)オプションが非常に遅いことがわかりました。私は複数の信頼されたドメイン環境を使用しており、その単純な情報をすばやく必要とするだけでは永遠にかかります。
から ここ
# 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)
Active DirectoryコマンドレットGet-ADDomainを使用します。
(Get-ADDomain -Current LocalComputer).NetBIOSName
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)
}
}
以下の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]
上記のリンクにはスレッドと会話があります。
これは、.NETフレームワーク(WMIよりもはるかに高速)を使用して行うこともできます。
PS > [System.Net.NetworkInformation.IPGlobalProperties]::GetIPGlobalProperties()
戻ります
HostName : SurfaceBook
DomainName : mydomain.com
NodeType : Hybrid
DhcpScopeName :
IsWinsProxy : False