как запретить команде echo отображать переменные, которые не установлены?

Я работаю над приложением, которое требует, чтобы мои пользователи делились своим полным доменным именем своей машины с Windows.

Чтобы помочь моим пользователям извлечь полное доменное имя своей машины, я хочу поделиться простыми шагами командной строки, которые они могут скопировать/вставить и выполнить на своих терминалах, чтобы получить результат.

Я думал о приведенной ниже команде для извлечения полного доменного имени локальной машины:

echo %COMPUTERNAME%.%USERDNSDOMAIN%

Но есть несколько проблем этой команды.

  1. Это дает вывод во ВСЕХ ЗАГЛАВНЫХ БУКВАХ. (Я могу жить с этим)

  2. Это дает неверный вывод, если переменная не установлена.

Например:

Если значение USRDNSDOMAIN не установлено, вы получите следующий вывод:

echo %COMPUTERNAME%.%USRDNSDOMAIN% //‹- Запустите это в командной строке cmd

ClientComputerName.%USRDNSDOMAIN% //‹- неправильный вывод: обратите внимание, что '%USERDNDOMAIN%' добавлено в o/p

Есть ли способ остановить повторение переменной, если ее значение не установлено?

Обратите внимание, что я хочу извлечь «полное доменное имя» моего компьютера с Windows только через приглашение CMD.


person Jatin    schedule 20.04.2020    source источник
comment
О, чувак, ты был так близок к тому, чтобы найти ответ самостоятельно. Фраза, которую вы ищете, если не определена.   -  person SomethingDark    schedule 20.04.2020
comment
Хотя это может нарушать простые шаги командной строки.   -  person avery_larry    schedule 20.04.2020
comment
Как насчет использования ipconfig /all?   -  person avery_larry    schedule 20.04.2020
comment
ipconfig /all — выдаст список выходных данных, и это будет обременять клиентов поиском по имени хоста и суффиксу DNS.   -  person Jatin    schedule 20.04.2020
comment
Если это невозможно с помощью простой командной строки, можете ли вы поделиться простым пакетным файлом, который будет выводить строку FQDN   -  person Jatin    schedule 20.04.2020
comment
@avery_larry - Не знаю, думаю, if defined userdnsdomain echo %computername%.%userdnsdomain% довольно просто.   -  person SomethingDark    schedule 20.04.2020
comment
Вы имеете в виду if defined userdnsdomain (echo %computername%.%userdnsdomain%) else (echo %computername%) За исключением, конечно, того, что на самом деле не находит домен DNS. Мои конечные пользователи получат это правильно 1 раз из 5, если мне повезет. Конечно, небольшой скрипт творил бы чудеса, если бы у них была общая сеть.   -  person avery_larry    schedule 20.04.2020
comment
ipconfig /all | findstr /i "host primary" но я не знаю, работает ли это в других системах, кроме Windows 10.   -  person avery_larry    schedule 20.04.2020
comment
@SomethingDark: Спасибо за ваш анализ. Кажется, предложение avery_larry работает, потому что оно также обрабатывает и другую часть.   -  person Jatin    schedule 20.04.2020
comment
@avery_larry: большое спасибо. Я думаю, что ваши предложения будут работать для меня.   -  person Jatin    schedule 20.04.2020
comment
Вы путаете вывод командной строки с выводом командного файла. В пакетном файле повторение вывода неопределенной переменной ничего не показывает. Ваш вывод будет таким: ClientComputerName..   -  person Squashman    schedule 20.04.2020
comment
@avery_larry: вывод ipconfig зависит от языка, поэтому ваш подход findstr работает только в англоязычных установках Windows.   -  person Stephan    schedule 20.04.2020
comment
Да; но я думаю, что ipconfig возвращает данные в том же порядке, независимо от языка, поэтому я бы, вероятно, использовал set "host=" & set "dns=" & for /F "delims=" %I in ('ipconfig /all ^| findstr /IC:". : "') do @if not defined host (set "host=%I") else if not defined dns (set "dns=%I"), а затем echo/%host:*. : =%.%dns:*. : =%...   -  person aschipfl    schedule 20.04.2020
comment
@aschipfl Ваше представление о простых шагах командной строки сильно отличается от моего. ржу не могу   -  person avery_larry    schedule 21.04.2020


Ответы (2)


Вы можете получить полное доменное имя с помощью PowerShell.

=== Get-FQDN.bat

@ECHO OFF
FOR /F %%A IN ('powershell -NoLogo -NoProfile -Command ^
    "([System.Net.Dns]::GetHostByName($Env:COMPUTERNAME)).HostName"') DO (
    SET "THEFQDN=%%A"
)
ECHO %THEFQDN%

Если у вас несколько пользователей, то наверняка есть способ установить на них программы и пакетные файлы. После того, как этот сценарий пакетного файла установлен в каталоге пользователя PATH, он представляет собой однострочную команду.

Get-FQDN
person lit    schedule 20.04.2020
comment
Я не верю, что ОП использует пакетный файл. Я также не верю, что ОП хочет несколько команд. И даже если сделать это однострочной командой, не относящейся к пакетному файлу, может показаться, что это нарушает простые шаги командной строки. - person avery_larry; 21.04.2020

Во-первых, обратите внимание, что DNS-домен ПОЛЬЗОВАТЕЛЯ НЕ является доменом, к которому присоединен компьютер, это домен, к которому принадлежит ПОЛЬЗОВАТЕЛЬ, вошедший в систему.

Если вы войдете в систему как пользователь из доверенного домена, дочернего или родительского домена, он отобразит этот домен.

Итак, если вы войдете в систему как ЛОКАЛЬНАЯ учетная запись, она будет пустой (вероятно, вы сталкиваетесь с этим)

Однако существует довольно простой способ получить фактический домен компьютера, используя NLTest. (Как и я, я никогда не мог понять, почему Microsoft не заполнила переменную этой информацией заранее.)

В строке CMD просто введите это в командную строку (я полагаю, вам нужно будет запустить с правами администратора, но я не проверял):

FOR /F "tokens=3" %_ IN ('nltest /DOMAIN_TRUSTS /PRIMARY ^|FIND /I "0:"') DO @(ECHO.%COMPUTERNAME%.%_)

Результат будет написан заглавными буквами, потому что именно так Microsoft отображает эту информацию.

Вот пример вывода:

MYLAPTOP.USERS.MYDOMAIN.LOCAL

Но при повторном прочтении вам нужно что-то, что пользователи знают, как сделать сами, так что, ммм, если бы вы могли просто отправить справочное электронное письмо или передать его им каждый раз, когда им это нужно.

Если вы просто хотите, чтобы эта информация и другая информация были легко доступны, вы можете использовать BGInfo или другие подобные параметры, чтобы установить фон рабочего стола.

В качестве альтернативы вы можете изменить сценарии входа в систему, чтобы создавать простой текстовый файл со всей информацией каждый раз, когда пользователь входит в систему, и помещать его в определенную папку, которую вы говорите им искать.

person Ben Personick    schedule 06.10.2020