Is there a way to find the fully qualified domain name of a Windows XP box?
Being unfamiliar with Windows I would describe what I'm looking for as the equivalent of the command hostname --fqdn
available in Linux.
You can find it in the system properties ("Computer name" tab).
With the command line, you can run IPCONFIG /ALL
and have a look at the "Host name" and "Primary DNS suffix" fields.
There is no such option to the hostname
command in windows. However, this should do the trick:
echo %COMPUTERNAME%.%USERDNSDOMAIN%
Or you can grep (under Windows: find /I "string"
) for Host- and Domain from set
or systeminfo
or ipconfig -all
name and glue it together elsewhere.
Edit: fixed Typo. Thanks Benoit
Update:
The variable %USERDNSDOMAIN%
is only available when logged on to a domain... The DNS suffix you get from a DHCP server is not put into a environment variable (as far as I could figure out).
wmic computersystem get domain
Apr 15, 2015 at 7:14
Try this from the command prompt:
FOR /F "tokens=2" %i in ('systeminfo ^| find /i "Domain"') do echo %computername%.%i
remember to use double %
for %i
if using this in a batchfile. e.g. %%i
A reason you may want to do it this way is: if your users and computers are in different domains, the %USERDNSDOMAIN%
will not be correct when applied to your computer.
If you only have one domain and no child domains, then you can use the other solutions above if you like.
vbscript :
' Print FQDN in lower case letters
' Volker Fröhlich (2011)
option explicit
dim Message
dim output
dim WshShell, objEnv
dim mydomain
' Read value from registry
function readFromRegistry (strRegistryKey, strDefault )
Dim WSHShell, value
On Error Resume Next
Set WSHShell = CreateObject("WScript.Shell")
value = WSHShell.RegRead( strRegistryKey )
if err.number <> 0 then
readFromRegistry= strDefault
else
readFromRegistry=value
end if
set WSHShell = nothing
end function
mydomain = readfromRegistry("HKLM\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Domain", "asdf")
' Get the WshShell object
Set WshShell = CreateObject("WScript.Shell")
' Get collection by using the Environment property
Set objEnv = WshShell.Environment("Process")
if (mydomain="") then
Message = LCase(objEnv("COMPUTERNAME"))
else
Message = LCase(objEnv("COMPUTERNAME")) & "." & mydomain
end if
' Write to stdout
set output = wscript.stdout
output.writeline Message
DOS BATCH FILE TO CALL ABOVE SCRIPT :
for /f %%a in ('cscript //nologo yourscriptname.vbs') do set FQDN=%%a
echo %FQDN%
pause
This will also work and does not have the delay of systeminfo:
for /f "tokens=2 delims=:" %i in ('ipconfig /all ^| findstr Search ') do SET domain=%i & SET newdomain=%domain: =% & echo %COMPUTERNAME%.%newdomain%
Another version:
echo.
echo Getting FQDN...
FOR /F "tokens=1-2" %%A in ('ping -a localhost -n 1') do (
echo %%A | find /i "Pinging" >nul
IF NOT ERRORLEVEL 1 SET "FQDN=%%B"
)
echo %FQDN%
With PowerShell:
(gpv HKLM:\SYSTEM\CurrentControlSet\services\Tcpip\Parameters HostName, Domain) -join '.'
If you need to port Unix shell scripts to windows or just like to work on the CLI, have a look at GNUwin32. It provides the common tools like cut, grep, etc for Windows.
Here is a CMD script for this:
@ECHO OFF
FOR /f "tokens=2,* delims= " %%a in ('IPCONFIG ^/ALL ^| FINDSTR "Primary Dns"') do set tempsuffix=%%b
FOR /f "tokens=1,2 delims=:" %%a in ('echo %tempsuffix%') do set dnssuffix=%%b
SET FQDN=%COMPUTERNAME%.%DNSSUFFIX:~1%
ECHO Server FQDN: %FQDN%
use 'hostname' and combine with for /F "tokens=3" %%I in ('reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v Domain') do set _MyDomain=%%I
An other way in PowerShell
Write-Host "$(Hostname).$((Get-NetIPConfiguration).NetProfile.Name)"
Or as a variable
$FQDN = $(Hostname).$((Get-NetIPConfiguration).NetProfile.Name)
$FQDN
Sample output
ServerName.ad.example.com