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:
Or you can grep (under Windows:
find /I "string") for Host- and Domain from
ipconfig -all name and glue it together elsewhere.
Edit: fixed Typo. Thanks Benoit
%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).
The command is:
ping -a localhost
' 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
Try this from the command prompt:
FOR /F "tokens=2" %i in ('systeminfo ^| find /i "Domain"') do echo %computername%.%i
remember to use double
%i if using this in a batchfile. e.g.
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.
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%
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%
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%