Powershell — Как удаленно включить DHCP на клиенте?


 

DHCP это удобно!

Но иногда в сети есть сегменты, которые не использовали DHCP в силу каких-то исторических причин. И когда приходит очередь перевести их на DHCP, то администратор обречен на хождение по рабочим местам: выгнать пользователя, закрыть его профиль, зайти под своим, настроить сеть, перезагрузиться, отловить пользователя, дождаться, пока загрузится его профиль, проверить, что все работает, вернуться по звонку обратно и объяснить, что пропадание электроэнергии и получение спама никак не связано с приходом админа – и так по всем клиентам. Жуть!

Но можно выполнить работу не сходя со своего рабочего места, если есть домен, права администратора и PowerShell.

Для настройки сетевых подключений используем класс WMI Win32_NetworkAdapterConfiguration Его описание есть на MSDN http://msdn.microsoft.com/en-us/library/aa394217(VS.85).aspx

Подключается к клиенту и получаем настройки сетевых адаптеров:

>$a = gwmi -ComputerName compname Win32_NetworkAdapterConfiguration

Посмотрим, что нам может пригодиться для настройки DHCP:

> $a[0] | gm

TypeName: System.Management.ManagementObject#root\cimv2\Win32_NetworkAdapterConfiguration

Name MemberType Definition

—- ———- ———-

DisableIPSec Method System.Management.ManagementBaseObject DisableIPSec()

EnableDHCP Method System.Management.ManagementBaseObject EnableDHCP()

…..

DHCPEnabled Property System.Boolean DHCPEnabled {get;set;}

…..

По названию понятно что есть что. Теперь посмотрим настройки клиента:

>$a[0]

DHCPEnabled : False

IPAddress :

DefaultIPGateway :

DNSDomain : domain.ru

ServiceName : b57w2k

Description : Broadcom NetXtreme Gigabit Ethernet for hp — Teefer2 Miniport

Index : 1

Да, действиетельно, DHCP у клиента отключен. Включаем DHCP на клиенте:

>$a[0].EnableDHCP() — тут бо-о-ольшая пауза, т.к. адрес клиента сменился и подключение зависло! Но реально адрес захватывается очень быстро, и мы можем просто закрыть окно PowerShell и проверить результат из другой сессии PowerShell:

>$a[0]

DHCPEnabled : True

IPAddress : {12.116.174.41}

DefaultIPGateway : {12.116.174.1}

DNSDomain : domain.ru

ServiceName : b57w2k

Description : Broadcom NetXtreme Gigabit Ethernet for hp — Teefer2 Miniport

Index : 1

Обращение к Win32_NetworkAdapterConfiguration возвращет список всех адаптеров, которые есть в системе, в том числе логические. Поэтому список может оказаться довольно большим. Но нас интересуют только адаптеры с отключенным DHCP. Получить их можно легко:

>$a = gwmi -ComputerName compname Win32_NetworkAdapterConfiguration –Filter “DHCPEnabled<>’True’ ”

Можно, конечно, использовать для фильтрации не WMI, а средства самого PowerShell:

>$a = gwmi -ComputerName compname Win32_NetworkAdapterConfiguration | Where {$_. DHCPEnabled -ne ‘True’}

Первый способ эффективнее при работе с WMI (особенно когда обрабатывается большой массив информации), но если вам нужно обработать в PowerShell все объекты, то используйте второй способ. В принципе вы можете указать любой необходимый фильтр в зависимости от вашей ситауции.

К сожалению большой таймаут WMI (об этом было выше) не позволяет нам выполнить переключение на DHCP в цикле (точнее цикл можно написать, но работать он будет очень долго!). Если вы знаете как избавится от WMI timeout, то напишите комментарий к статье.

Заключение.Вот так достаточно просто можно удаленно переключить компьютеры в сети на получение адресов по протоколу DHCP. А съэкономленное время лучше потратить на более интересное занятие, чем руко-ножная настройка сетевых подключений.

Реклама

комментария 4

  1. […] 1.       Powershell – Как удаленно включить DHCP на клиенте? […]

  2. Спасибо, добрый человек. Ты мне пару-тройку ночей сэкономил.
    Не могу проверить, но если попробовать выполнять через джобы?
    Start-Job вроде создаёт отдельный поток, который и будет висеть, пока не отвалится.
    Другой вариант:
    где-то глубоко в настройках winrm был таймаут для определения разрыва подключения

    • Спасибо за дополнения. Использовать Job можно, но есть некоторые трудности… Хорошая новость а том, что трудности эти уже позади: на текущий момент есть такое средство как Workflow. В нем реализовано параллельное выполнение операций. На днях опубликую пример скрипта использующего Workflow для удаленной настройки DNS.

  3. Если не ошибаюсь — workflow появился начиная с версии 3.
    Было бы хорошо, если бы вы сделали обзор по workflow.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: