Назад | Перейти на главную страницу

Эквивалент команды Linux hostname --fqdn в Windows XP?

Есть ли способ найти полное доменное имя окна Windows XP?

Поскольку я не знаком с Windows, я бы назвал то, что ищу, эквивалентом команды hostname --fqdn доступно в Linux.

Такой возможности нет у hostname команда в windows. Однако это должно помочь:

echo %COMPUTERNAME%.%USERDNSDOMAIN%

Или вы можете использовать grep (в Windows: find /I "string") для хоста и домена из set или systeminfo или ipconfig -all назовите и склейте его в другом месте.

Изменить: исправлена ​​опечатка. Спасибо Бенуа

Обновить: Переменная %USERDNSDOMAIN% доступен только при входе в домен ... DNS-суффикс, который вы получаете от DHCP-сервера, не помещается в переменную среды (насколько я мог понять).

Вы можете найти его в свойствах системы (вкладка «Имя компьютера»).

С помощью командной строки вы можете запустить IPCONFIG /ALL и посмотрите поля «Имя хоста» и «Первичный суффикс DNS».

Команда такая:

ping -a localhost

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 ДЛЯ ВЫЗОВА ВЫШЕ СКРИПТА:

for /f %%a in ('cscript //nologo yourscriptname.vbs') do set FQDN=%%a
echo %FQDN%
pause

Попробуйте это из командной строки:

FOR /F "tokens=2" %i in ('systeminfo ^| find /i "Domain"') do echo %computername%.%i

не забудьте использовать двойной % для %i при использовании в пакетном файле. например %%i

Причина, по которой вы можете захотеть сделать это таким образом, заключается в следующем: если ваши пользователи и компьютеры находятся в разных доменах, %USERDNSDOMAIN% не будет корректным при применении к вашему компьютеру. Если у вас есть только один домен и нет дочерних доменов, вы можете использовать другие решения, указанные выше, если хотите.

Это также будет работать и не будет иметь задержки systeminfo:

for / f "tokens = 2 delims =:"% i in ('ipconfig / all ^ | findstr Search') do SET domain =% i & SET newdomain =% domain: =% & echo% COMPUTERNAME%.% newdomain%

Если вам нужно перенести сценарии оболочки Unix в Windows или просто работать с CLI, взгляните на GNUwin32. Он предоставляет стандартные инструменты, такие как вырезание, grep и т. Д. Для Windows.

Вот сценарий CMD для этого:

@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%