Мне нужна команда, аналогичная доменному имени Linux в Windows, без использования сторонних приложений.
Есть ли такая команда?
Мне нужна команда, аналогичная доменному имени Linux в Windows, без использования сторонних приложений.
Есть ли такая команда?
Пытаться:
echo %USERDOMAIN%
или же
echo %USERDNSDOMAIN%
Если это все еще не работает, вы можете попробовать использовать systeminfo:
systeminfo | findstr /B /C:”Domain”
Вот хитрый способ сделать это, используя команду net и команду find в командном файле:
set command=net user "%USERNAME%" /domain | FIND /I "Full Name"
FOR /F "tokens=1 delims=" %%A in ('%command%') do SET fullNameText=%%A
set fullName=%fullNameText:Full Name=%
for /f "tokens=* delims= " %%a in ("%fullName%") do set fullName=%%a
Первая строка хранит команду, которую мы хотим выполнить в переменной. Он извлекает имя пользователя из переменных среды и передает его в команду net user
а также в параметр /domain
чтобы указать, что нужно извлечь из текущего домена. Затем он передает результат из этого, который представляет собой набор данных о текущем пользователе, в метод find, который извлекает только то свойство, которое нам нужно. Результат поиска находится в формате "Полное имя Джон Доу". Вторая строка выполнит команду и поместит результат в переменную fullNameText
. Третья строка удалит часть "Полное имя" результата и в итоге получит "Джон Доу". Четвертая строка с циклом for удалит все первые пробелы из результата, и вы получите "John Doe" в переменной fullName
.
@Mike: отличное решение - но у меня были некоторые проблемы с ним в многоязычной среде. У меня есть немецкий и английский серверы.
Я изменил ваш скрипт для использования wmic.exe:
@REM + Find the computer domain name
@echo off
FOR /F "usebackq tokens=*" %%a IN (`wmic.exe COMPUTERSYSTEM GET DOMAIN /Value`) DO (
@((ECHO %%a | findstr /i /c:"Domain=") && SET _str=%%a) > NUL 2>&1
)
FOR /F "tokens=2 delims=^=" %%a IN ("%_str%") do SET _computerDomain=%%a
SET _computerDomain=%_computerDomain: =%
SET _fqdn=%COMPUTERNAME%.%_computerDomain%
echo %_fqdn%
Спасибо за вашу идею
% USERDOMAIN% и домен сетевого компьютера могут отличаться. Команда systeminfo получит правильный ответ, но он МЕДЛЕННЫЙ! Вот решение, которое я использовал:
@REM + find the computer domain name
FOR /F "usebackq tokens=*" %%a IN (`ipconfig /all`) DO (
@((ECHO %%a | findstr /i /c:"Primary Dns Suffix") && SET _str=%%a) > NUL 2>&1
)
FOR /F "tokens=2 delims=:" %%a IN ("%_str%") do SET _computerDomain=%%a
SET _computerDomain=%_computerDomain: =%
SET _fqdn=%COMPUTERNAME%.%_computerDomain%
Достаточно одной строки, чтобы получить домен с помощью локального пользователя:
FOR /F "usebackq tokens = 2 delims ==" %% a IN (
wmic.exe COMPUTERSYSTEM GET DOMAIN /Value ^|find /i "domain"
) DO set _computerDom = %% a
Вы можете запустить следующую команду в командной строке:
set user
Он дает вам гораздо больше информации, связанной с доменом, в дополнение к имени домена, как показано на снимке ниже:
Важное примечание: домен, в котором зарегистрирован ваш компьютер, может отличаться от домена, в котором зарегистрирован вошедший в систему пользователь. Ознакомьтесь с информацией о транзитивности и направлении доверия домену, чтобы узнать, как пользователь, зарегистрированный в одном домене, может войти в систему компьютера в другом домене.