Взаимодействие с TCP/IP через PowerShell (часть 4)

Опубликовано: 19 Марта, 2023

  • Взаимодействие с TCP/IP через PowerShell (часть 2)
  • Взаимодействие с TCP/IP через PowerShell (часть 3)

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

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

Для демонстрации я настроил компьютер с Windows 8.1, и в настоящее время он использует динамически назначаемый IP-адрес. Если вы посмотрите на рисунок А, то увидите, что эта виртуальная машина в настоящее время использует адрес 147.100.100.222. Шлюз по умолчанию и DNS-сервер установлены на 147.100.100.100. Вы также можете видеть, что я получил эту информацию с помощью командлета Get-NetIPConfiguration.

Изображение 4735
Рисунок A. Сейчас эта виртуальная машина использует динамически назначаемый IP-адрес.

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

Самый простой способ определить сетевой адаптер с помощью PowerShell — ввести командлет Get-NetAdapter. Если вы посмотрите на рисунок B, то увидите, что моя виртуальная машина имеет один сетевой адаптер и называется (достаточно удобно) Ethernet. Описание виртуального сетевого адаптера — виртуальный сетевой адаптер Microsoft Hyper-V.

Изображение 4736
Рисунок B: Виртуальная машина содержит один виртуальный сетевой адаптер с именем Ethernet.

Нам придется несколько раз обращаться к этому сетевому адаптеру при настройке IP-адреса машины. Самый простой способ сделать это — связать сетевой адаптер с переменной, которая будет представлять сетевой адаптер. К счастью, PowerShell позволяет очень легко объявить переменную. Вам просто нужно выбрать имя для переменной. Как только вы выбрали имя переменной, укажите знак доллара перед именем и знак равенства после имени. Например, если бы я хотел использовать переменную с именем adapter, я мог бы назначить ее сетевому адаптеру с помощью следующей команды:

$adapter = Get-NetAdapter -Name Ethernet

Стоит отметить, что знак доллара становится частью имени переменной. С этого момента переменная $adapter будет представлять наш сетевой адаптер.

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

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

Поэтому для демонстрации я собираюсь установить IP-адрес виртуальной машины на 10.1.0.1. Я буду использовать 10.1.0.10 в качестве шлюза по умолчанию и установлю длину префикса 24.

Мы можем назначить их новые значения сетевому адаптеру с помощью командлета New-NetIPAddress. Командлет требует, чтобы мы указали псевдоним интерфейса. Псевдоним интерфейса — это просто имя нашего сетевого адаптера, поскольку для этого мы используем переменную. Нам также нужно будет указать IP-адрес, длину префикса и шлюз по умолчанию. Другая часть информации, которую мы должны предоставить, — это семейство IP-адресов. Поскольку мы работаем с адресами IPv4, семейство адресов — IPv4. Фактическая команда выглядит так:

New-NetIPAddress -InterfaceAlias $adapter.Name -AddressFamily IPv4 -IPAddress 10.1.0.1 -PrefixLength 24 -DefaultGateway 10.1.0.10

Есть вероятность, что при выполнении этой команды вы получите сообщение об ошибке, подобное тому, что показано на рисунке C. Как вы можете видеть на рисунке, PowerShell выдает нам сообщение об отказе в доступе.

Изображение 4737
Рисунок C: Вы можете получить сообщение об ошибке «Отказано в доступе».

Причина этой ошибки в том, что вы сможете использовать PowerShell для изменения IP-адреса, только если вы используете сеанс PowerShell с повышенными правами. Чтобы открыть сеанс PowerShell с повышенными привилегиями, переместите указатель мыши в правую верхнюю часть экрана (в Windows 8) и щелкните чудо-кнопку «Поиск». Введите PowerShell в поле поиска. Когда отобразятся результаты поиска, щелкните правой кнопкой мыши список PowerShell и выберите параметр «Запуск от имени администратора» в контекстном меню.

Если вы забыли запустить PowerShell от имени администратора, а затем должны вернуться и открыть окно с повышенными привилегиями, вам придется повторно объявить переменную $adapter. Переменные зависят от сеанса и не переносятся между сеансами PowerShell. Вы можете увидеть, как выглядит команда при запуске, на рисунке D.

Изображение 4738
Рисунок D: Мы изменили IP-адрес из PowerShell.

Мы почти закончили, но мы еще не сделали назначение DNS-сервера. Для этого введите следующую команду:

Set-DnsClientServerAddress -InterfaceAlias $adapter.Name -ServerAddresses 10.1.0.3

В данном случае параметр ServerAddress используется для указания адреса нашего DNS-сервера. Вы можете увидеть, как это выглядит в действии, на рисунке E. Как видно из рисунка, я использовал командлет Get-NetIPConfiguration для проверки назначения DNS-сервера.

Изображение 4739
Рисунок E: Мы назначаем DNS-сервер.

Учитывая длину некоторых команд PowerShell, которые мы использовали, легко сделать опечатку. Если вы сделаете ошибку, команда обычно не сработает. Что еще хуже, командлет New-NetIPConfiguration имеет тенденцию возвращать некоторые действительно загадочные сообщения об ошибках. К счастью, есть пара вещей, которые вы можете сделать, когда что-то пойдет не так.

Сначала попробуйте ввести имя переменной. Вы видели, как я сделал это на рисунке D. Ввод имени переменной сам по себе позволяет вам подтвердить, что переменная содержит правильные данные.

Кроме того, вы можете использовать командлет Get-NetIPConfiguration для проверки информации, которую вы пытаетесь ввести в командлет New-NetIPConfiguration. Оба командлета используют одни и те же параметры. Таким образом, вы можете ввести что-то вроде:

Get-NetIPConfiguration -InterfaceAlias $adapter.Name -AddressFamily IPv4

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

Вывод

Как видите, настроить TCP/IP с помощью PowerShell относительно просто. Методы, которые я показал вам, наиболее полезны, когда вам нужно настроить несколько машин.

  • Взаимодействие с TCP/IP через PowerShell (часть 2)
  • Взаимодействие с TCP/IP через PowerShell (часть 3)