HOSTNAME — узнать имя компьютера через командную строку

HOSTNAME выводит сетевое имя компьютера в командной строке Windows. Удобна для скриптов, диагностики сети и автоматизации задач администрирования.

Команда HOSTNAME выводит сетевое имя текущего компьютера — то самое имя, которое видно в сети, в свойствах системы и в оснастке Active Directory. Это простейший способ получить имя машины из командной строки или скрипта, не открывая GUI.

Синтаксис команды HOSTNAME

HOSTNAME

Команда не имеет ключей и не принимает аргументов. Единственный вывод — имя компьютера, завершённое переводом строки.

Для получения имени удалённого компьютера HOSTNAME не подходит — используйте другие инструменты (см. раздел «Примеры использования»).

Ключи и параметры

У команды HOSTNAME нет ключей. Единственный доступный аргумент:

Аргумент Описание Пример
(без аргументов) Вывести имя текущего компьютера hostname
/? Вывести краткую справку hostname /?

Хотя у самой команды нет ключей, её вывод можно перенаправлять, фильтровать и сохранять стандартными операторами CMD.

Примеры использования

Вывести имя текущего компьютера

Самый простой случай — нужно быстро узнать имя машины.

hostname

Вывод: одна строка, например DESKTOP-ABC123 или SRV-FILESERVER01. Команда выполняется мгновенно и не требует прав администратора.

Сохранить имя компьютера в файл

Нужно зафиксировать имя машины при инвентаризации или создании отчёта.

hostname > C:\hostname.txt

Файл hostname.txt в корне диска C будет содержать имя компьютера. Для добавления к существующему файлу используйте >>: hostname >> C:\machines.txt.

Использовать имя компьютера в переменной скрипта

В bat-файле нужно использовать имя машины как часть пути или имени файла журнала.

@echo off
for /f %%i in ('hostname') do set PCNAME=%%i
echo Компьютер: %PCNAME%
echo Лог: C:\Logs\%PCNAME%-%DATE:~-10%.log

Команда FOR /F захватывает вывод hostname в переменную PCNAME. Теперь имя машины доступно для всего скрипта.

Проверить, запущен ли скрипт на нужной машине

Скрипт должен выполняться только на определённом сервере — на остальных завершаться с предупреждением.

@echo off
for /f %%i in ('hostname') do set PCNAME=%%i
if /i not "%PCNAME%"=="SRV-BACKUP01" (
    echo Этот скрипт предназначен только для SRV-BACKUP01.
    exit /b 1
)
echo Запуск резервного копирования на %PCNAME%...

Скрипт сравнивает текущее имя машины с ожидаемым и прерывает работу, если они не совпадают.

Добавить имя компьютера в имя архива

При автоматическом резервном копировании нужно включать имя машины в имя файла архива.

@echo off
for /f %%i in ('hostname') do set PCNAME=%%i
set BACKUP=C:\Backups\%PCNAME%-backup.zip
echo Создаётся архив: %BACKUP%

Каждый компьютер в сети создаёт архив с уникальным именем — удобно при централизованном хранении резервных копий.

Получить имя удалённого компьютера через NSLOOKUP

HOSTNAME показывает только локальное имя. Для удалённой машины по IP используйте nslookup:

nslookup 192.168.1.50

Вывод покажет DNS-имя компьютера с IP-адресом 192.168.1.50. Альтернатива — ping -a 192.168.1.50, который резолвит имя при ответе.

Использование HOSTNAME в PowerShell-скрипте

В PowerShell-скриптах удобнее использовать встроенную переменную:

$pcName = hostname
Write-Host "Имя компьютера: $pcName"

# Или через встроенное свойство .NET:
$pcName = [System.Net.Dns]::GetHostName()
Write-Host "Имя компьютера: $pcName"

Оба способа возвращают одинаковый результат.

Частые ошибки и решения

Ошибка / проблема Причина Решение
Команда выводит имя, но оно не совпадает с отображаемым в сети Компьютер состоит в домене — hostname выводит только NetBIOS-имя без суффикса домена Для полного имени (FQDN) используйте: wmic computersystem get DNSHostName или в PowerShell: [System.Net.Dns]::GetHostEntry("").HostName
В скрипте %COMPUTERNAME% и вывод hostname отличаются Переменная %COMPUTERNAME% в верхнем регистре, hostname может вернуть смешанный регистр При сравнении использовать IF /I (игнорировать регистр) или %COMPUTERNAME% для стабильного результата в скриптах
Вывод содержит лишний символ или пустую строку при записи в переменную Некорректный способ присваивания (например через SET /P вместо FOR /F) Использовать for /f %%i in ('hostname') do set VAR=%%i — этот метод надёжно убирает лишние символы
Нужно узнать имя удалённого компьютера, но hostname не принимает аргументов hostname работает только локально Использовать nslookup IP, ping -a IP или PowerShell: Invoke-Command -ComputerName ИМЯ -ScriptBlock { hostname }
Нужно изменить имя компьютера через командную строку hostname — команда только для чтения Для смены имени использовать: wmic computersystem where name="%COMPUTERNAME%" call rename name="НОВОЕ_ИМЯ" или PowerShell: Rename-Computer -NewName "НОВОЕ_ИМЯ"

Когда применять, а когда нет

HOSTNAME — утилита только для чтения имени локального компьютера. Применяйте её в bat-скриптах, когда нужно включить имя машины в путь файла, имя лога или условную проверку. Для получения FQDN (полного доменного имени) команда не подходит — используйте wmic computersystem get DNSHostName. Для получения имени удалённого компьютера используйте nslookup, ping -a или PowerShell-командлет Invoke-Command. В PowerShell вместо вызова hostname предпочтительнее использовать переменную среды $env:COMPUTERNAME или метод [System.Net.Dns]::GetHostName() — они встроены в язык и не требуют запуска внешней команды.

FAQ

Чем HOSTNAME отличается от переменной %COMPUTERNAME%?

Оба возвращают имя компьютера, но %COMPUTERNAME% — переменная среды, доступная напрямую в CMD без запуска команды. Она всегда в верхнем регистре. Вывод hostname сохраняет исходный регистр имени. В скриптах %COMPUTERNAME% удобнее, так как не требует конструкции FOR /F.

Как узнать полное доменное имя компьютера (FQDN)?

Команда hostname возвращает только короткое NetBIOS-имя. Для FQDN используйте: wmic computersystem get DNSHostName или в PowerShell: [System.Net.Dns]::GetHostEntry("").HostName.

Можно ли изменить имя компьютера командой HOSTNAME?

Нет, hostname — только для чтения. Для смены имени используйте PowerShell: Rename-Computer -NewName "НОВОЕ_ИМЯ" -Restart (требует перезагрузки и прав администратора).

Как получить имя компьютера удалённой машины?

Несколько способов: nslookup IP-адрес (DNS-разрешение), ping -a IP-адрес (если DNS настроен), или PowerShell: Invoke-Command -ComputerName ИМЯ_ИЛИ_IP -ScriptBlock { $env:COMPUTERNAME }.

Нужны ли права администратора для команды HOSTNAME?

Нет, hostname не требует прав администратора. Команду может выполнить любой пользователь системы.

Как использовать HOSTNAME в скрипте PowerShell?

В PowerShell доступны три эквивалентных способа: hostname (вызов команды CMD), $env:COMPUTERNAME (переменная среды) и [System.Net.Dns]::GetHostName() (.NET-метод). Для скриптов рекомендуется $env:COMPUTERNAME — быстрее и без создания дочернего процесса.

Оцените статью
( Пока оценок нет )
MW10
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.