Как получить имя компьютера с помощью 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 - это самый простой способ запомнить и использовать.
Если вам нужно найти имя внутри скрипта, я бы рекомендовал использовать переменную окружения или класс в зависимости от операционной системы в вашей среде.
Если у вас есть вопросы, просто оставьте комментарий ниже.
