2011-04-27 13 views
15

¿Cómo puedo obtener el nombre de dominio NetBIOS (también conocido como "corto") de la computadora actual de PowerShell?Dominio de la computadora NetBIOS en PowerShell

$ ENV: USERDOMAIN muestra el dominio del usuario actual, pero quiero el dominio al que pertenece la máquina actual.

Descubrí que puede hacerlo pretty easily in VBScript, pero aparentemente ADSystemInfo isn't very nice to use en PowerShell.

actualización

Aquí está mi solución final que incorpora la sugerencia de utilizar Win32_NTDomain, pero filtrando al dominio de la máquina actual

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

Respuesta

17

En la mayoría de los casos, el el nombre de dominio NetBIOS predeterminado es la etiqueta situada más a la izquierda en el dominio DNS n hasta los primeros 15 bytes (los nombres NetBIOS tienen un límite de 15 bytes). El nombre de dominio NetBIOS puede cambiarse durante la instalación de Active Directory, pero no se puede cambiar.

objeto Win32_ComputerSystem El WMI da información acerca de un equipo con Windows

PS C:\> Get-WmiObject Win32_ComputerSystem 

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

Así que el nombre de dominio está dado por:

PS C:\> (gwmi WIN32_ComputerSystem).Domain 

Pero en la instalación de dominio, se le da el nombre DNS. En este caso, puede usar el comando nbtstat -n para buscar el nombre de dominio NetBIOS que se muestra así <DOMAIN><1B>.

El sistema de PowerShell puede ser:

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

Aquí es otra forma mediante WMI

PS C:\> (gwmi Win32_NTDomain).DomainName 
+0

ya he intentado este enfoque y que no funciona. La propiedad 'Dominio' no es el nombre corto/NetBIOS que estoy buscando. Que contiene el nombre completo de dominio AD –

+0

Tiene toda la razón, así que edité mi respuesta. – JPBlanc

+0

Intenté esto y para el mío se muestra como <1E> (en lugar de <1B>) –

2

De 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 es después de "dominio del equipo" por lo que sería la respuesta $GetComputerDomain (abajo), pero Agregaré $ GetUserDomain también para referencia.

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

puedo encontrar la opción WMI (gwmi) para ser extremadamente lento, sobre todo, cuando se está consultando la clase Win32_NTDomain. Tengo un entorno de dominio de confianza múltiple y me lleva una eternidad cuando necesito esa información simple rápida.

+1

Disculpe, esos no son los resultados que buscaba. Esos dos devuelven un nombre completo de dominio de estilo DNS. Estaba buscando el nombre de dominio corto/estilo NetBIOS. –

8

Uso env: para obtener la configuración del entorno a través de PowerShell

NetBIOS: $ env: userdomain FQDN: $ env: USERDNSDOMAIN

Para ver todos los valores:

dir env: (sin $)

+1

Esa respuesta ya se menciona en mi pregunta. Sin embargo, no devuelve el dominio de la COMPUTADORA (que es lo que estaba preguntando) –

+0

Hay 'USERDOMAIN' y' USERDNSDOMAIN'. El segundo hizo el trabajo para mi tarea. – Andreas

+0

Gracias! Esta es la respuesta que estoy buscando. – lesca

0

El siguiente comando de PowerShell funciona muy bien. Probé después de probar varias soluciones.

Si se utiliza el siguiente comando Net:

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

Funciona también, pero se utiliza DNS para resolver, en mi caso, tenemos WINS configurado para soportar una aplicación que requiere, por lo que puede no lo usas A continuación se muestra lo que terminé usando como parte de una secuencia de comandos que utilizo para comprobar el registro WINS para cada cliente:

$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

El enlace de arriba tiene la rosca y la conversación.

1

uso del Active Directory cmdlet Get-ADDomain:

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

Eso parece una vaive en la respuesta de @Sacha –

+0

Sí, es similar. El mío tiene menos teclas :) – Jez

+0

¡Ja! Bueno, supongo que es cierto que solo tienes un número limitado de ellos para usar http://keysleft.com/ :-) –

Cuestiones relacionadas