Используйте PowerShell, чтобы определить IP-адрес, который используют ваши виртуальные машины.

Опубликовано: 16 Апреля, 2023
Используйте PowerShell, чтобы определить IP-адрес, который используют ваши виртуальные машины.

Люди, не работающие в сфере ИТ, часто предполагают, что ИТ-специалисты имеют доступ абсолютно ко всем ИТ-ресурсам своей компании. Хотя когда-то это могло иметь место, в последние годы обязанности в области ИТ становятся все более разрозненными. В производственных средах администраторы виртуализации редко имеют разрешение на вход в виртуальные машины, которыми они управляют. Несмотря на то, что такое разделение прав административного доступа, несомненно, дает преимущества, это также может затруднить устранение неполадок. Например, если у конкретной виртуальной машины возникают проблемы с сетевым подключением, администратор виртуализации может не иметь возможности войти в виртуальную машину для диагностики проблемы. К счастью, есть способы получить доступ к сведениям о конфигурации сети виртуальной машины (например, к IP-адресу, который использует виртуальная машина) без необходимости входа в виртуальную машину для этого.

Командлет Get-VM: полезный — в определенной степени

Get-VM — одна из команд PowerShell, которую администраторы чаще всего используют для получения информации о виртуальной машине. Однако каким бы удобным ни был этот командлет, существует ограничение на информацию, которую он может предоставить. Чтобы показать вам, что я имею в виду, я создал виртуализированный контроллер домена на сервере Hyper-V. Этот контроллер домена называется DC. Ввод Get-VM DC заставляет PowerShell отображать некоторую действительно основную информацию о виртуальной машине. Например, как вы можете видеть на рисунке ниже, PowerShell отображает состояние виртуальной машины, объем используемой виртуальной машиной памяти и время работы виртуальной машины. Хотя информация, показанная на этом экране, может быть полезной, ее недостаточно для устранения большинства проблем с сетью.

Изображение 14380
К счастью, командлет Get-VM способен отображать гораздо более подробную информацию, чем та, что показана на снимке экрана выше. Если вы хотите увидеть более подробное представление различных атрибутов виртуальной машины, введите эту команду:

Get-VM <имя виртуальной машины> | Выбрать объект *

Вы можете увидеть, как выглядит вывод этой команды на скриншоте ниже.

Изображение 14381 Итак, где IP-адрес виртуальной машины?

Снимок экрана, показанный выше, содержит информацию, которая может быть полезна при устранении неполадок. Однако вы могли заметить, что в выходных данных командлета Get-VM не указан IP-адрес виртуальной машины. Тем не менее, есть способ определить IP-адрес виртуальной машины и другие параметры конфигурации, связанные с сетью.

На приведенном выше снимке экрана показана только часть выходных данных командлета Get-VM. Если вы посмотрите на скриншот ниже, вы увидите последние несколько элементов, которые отображались. Прочитав список свойств, вы заметите, что одно из них называется NetworkAdapters. Однако, если вы посмотрите внимательно, вы также заметите, что в то время как другие свойства, показанные на снимке экрана, имеют связанные с ними значения, NetworkAdapters показывает значение {Network Adapter, Network Adapter, Posey}.

Изображение 14382
Тот факт, что значение заключено в фигурные скобки, указывает на то, что NetworkAdapters — это свойство, которое можно расширить. Расширение этого свойства позволит PowerShell отображать сетевую конфигурацию виртуальной машины, включая ее IP-адрес. Расширение можно выполнить с помощью командлета Get-VM в сочетании с командлетом Select-Object и переключателем ExpandProperty. Вот как выглядит команда:

Get-VM <имя виртуальной машины> | Select-Object-ExpandProperty NetworkAdapters

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

Изображение 14383
Как вы можете видеть на рисунке выше, некоторые виртуальные машины имеют несколько сетевых адаптеров, и каждый сетевой адаптер обычно имеет как адрес IPv4, так и адрес IPv6. Если вам нужен список виртуальных машин, имена их сетевых адаптеров и их адреса IPv4 (без адреса IPv6), вам придется выйти за рамки командной строки и создать сценарий. Вот скрипт, который я создал для этой цели:

$VMs = Get-VM ForEach($VM в $VM){ $Adapters=($VM | Get-VMNetworkAdapter) ForEach ($Adapter в $Adapters){ Write-Host($VM.VMName,' ', $Adapter. Имя, ' ', $Adapter.IPAddresses[0]) } }

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

Для каждого сетевого адаптера на каждой виртуальной машине сценарий отображает имя виртуальной машины ($VM.VMName), имя сетевого адаптера ($Adapter.Name) и адрес IPv4 ($Adapter.IPAddresses[0]).

Если вам интересно, IPAddresses содержит несколько свойств, включая адрес IPv4 и адрес IPv6. К сожалению, эти свойства не имеют имен, а это означает, что нет простого способа заставить PowerShell отображать только IPv4-адрес. Поскольку свойства организованы в виде массива, я смог добавить [0] к $Adapter.IPAddresses, что указывает PowerShell отображать элемент в позиции 0 массива IPAddresses. Нулевая позиция содержит первый IP-адрес в списке, который обычно является адресом IPv4.

Вы можете увидеть этот скрипт в действии на рисунке ниже. Стоит отметить, что я внес одну небольшую модификацию в скрипт, показанный на рисунке. Вместо того, чтобы позволить сценарию отображать все IP-адреса всех моих виртуальных машин, я ограничил сценарий отображением IP-адресов одной виртуальной машины, включив имя виртуальной машины (DC) в самую первую строку кода.
Изображение 14384

Одно ограничение

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

Между прочим, гораздо проще найти IP-адрес виртуальной машины, если вы действительно можете войти в виртуальную машину. Изнутри виртуальной машины просто используйте команду IPConfig, чтобы увидеть IP-адреса, которые использует виртуальная машина.