Поиск по сайту:

Как получить имя компьютера с помощью PowerShell


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

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

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

Получить имя компьютера

Самый простой способ узнать имя компьютера, на котором вы сейчас работаете, — это использовать старую команду hostname. Эта команда обычно используется в командной строке, но она также прекрасно работает в PowerShell.

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

Store hostname in variable
$hostname = hostname

Copy hostname to clipboard
hostname | clip

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

Более "PowerShell" способ получить имя хоста - это использовать переменную окружения. Это набор динамических переменных, который используется операционной системой и другими процессами для хранения информации. Мы можем получить доступ к информации, хранящейся в переменной окружения, используя диск $Env:, за которым следует имя переменной.

Итак, чтобы получить имя компьютера, мы можем сделать следующее:

$env:COMPUTERNAME

Проблема с этим методом заключается в том, что он работает только на машинах с Windows. В большинстве случаев этого достаточно, но если вам нужно запустить ваш скрипт и на macOS, то лучшим вариантом будет использовать класс Environment для получения имени машины. Это работает на всех машинах:

[Environment]::MachineName

Используя Общую информационную модель (CIM)

Другим быстрым и надежным методом для получения имени устройства является использование Общей модели информации (CIM). Это преемник старого, хорошо известного объекта WMI, который мы ранее использовали для получения информации о компьютере.

Преимуществом использования Get-CimInstance является то, что мы также можем использовать этот метод для удалённых компьютеров.

(Get-CimInstance -ClassName Win32_ComputerSystem).Name

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

В некоторых случаях вам нужно получить имя компьютера удаленной машины. Мы можем использовать любой из методов выше и просто поместить их в блок скрипта команды invoke-command, вот так:

Invoke-Command -ComputerName "192.168.1.12", "192.168.1.14" -ScriptBlock { $env:COMPUTERNAME }

Но в этом случае лучшим вариантом будет использовать командлет Get-CimInstance. Это быстрее и позволяет получить имя компьютера нескольких удаленных компьютеров:

Get-CimInstance -ComputerName "192.168.1.12", "192.168.1.14" -ClassName Win32_ComputerSystem| Select PSComputerName,Name

Используя Resolve DnsName

Другой метод получения имени компьютера на основе IP-адреса заключается в использовании команды Resolve-DnsName. Эта команда выполнит запрос к DNS-серверу для разрешения IP-адреса компьютера.

Resolve-DnsName -Name 192.168.1.12 | Select-Object -ExpandProperty NameHost

Заключение

Существуют и другие способы узнать название устройства, но большинство из них не очень удобны или даже медленнее (например, Get-ComputerInfo). На локальном компьютере команда hostname - это самый простой способ запомнить и использовать.

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

Если у вас есть вопросы, просто оставьте комментарий ниже.