Большая часть задач администрирования низкоуровневых сетевых протоколов связана с протоколом TCP/IP, поскольку это чаще всего используемый сетевой протокол. В этом разделе рассказывается об использовании средств Windows PowerShell и WMI для выполнения этих задач.

Получение списка IP-адресов компьютера

Список всех IP-адресов, используемых локальным компьютером, возвращает следующая команда:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Format-Table -Property IPAddress

Вывод этой команды отличается от большинства списков свойств тем, что значения заключены в фигурные скобки:

IPAddress

---------

{192.168.1.80}

{192.168.148.1}

{192.168.171.1}

{0.0.0.0}

Чтобы понять причину появления скобок, используйте командлет Get-Member для изучения свойства IPAddress:

PS> Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Get-Member -Name IPAddress

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

Configuration

Name MemberType Definition

---- ---------- ----------

IPAddress Property System.String[] IPAddress {get;}

Свойство IPAddress каждого сетевого адаптера в действительности представляет собой массив. Фигурные скобки в определении указывают на то, что свойство IPAddress содержит не значение типа System.String, а массив значений типа System.String.

Вывод данных IP-конфигурации

Для отображения подробных данных IP-конфигурации каждого сетевого адаптера воспользуйтесь следующей командой:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName .

По умолчанию отображается очень небольшая часть доступных сведений об объекте конфигурации сетевого адаптера. Для более глубокой инспекции и устранения неполадок воспользуйтесь командлетом Select-Object или командлетом форматирования, например, Format-List, чтобы задать отображаемые свойства.

Если свойства IPX или WINS не представляют интереса (что характерно для современной сети TCP/IP), можно использовать параметр ExcludeProperty командлета Select-Object, чтобы скрыть свойства с именами, начинающимися на WINS или IPX:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Select-Object -Property [a-z]* -ExcludeProperty IPX*,WINS*

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

Проверка связи с компьютерами

Простую проверку связи с компьютером можно выполнить при помощи объекта Win32_PingStatus. Следующая команда производит проверку связи, но при этом выводит большой объем сведений:

Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" -ComputerName .

Более удобно отображать сводные данные, содержащие свойства Address, ResponseTime и StatusCode, как это делает следующая команда. Параметр Autosize командлета Format-Table изменяет размер столбцов таблицы, чтобы они правильно отображались в Windows PowerShell.

PS> Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" -ComputerName . | Format-Table -Property Address,ResponseTime,StatusCode -Autosize

Address   ResponseTime StatusCode
-------   ------------ ----------
127.0.0.1			0		0
A status code of 0 indicates a successful ping.

Для проверки связи с несколькими компьютерами с помощью одной команды можно использовать массив. Поскольку адресов несколько, для проверки связи с каждым адресом по отдельности можно использовать цикл ForEach-Object:

"127.0.0.1","localhost","research.microsoft.com" | ForEach-Object -Process {Get-WmiObject -Class Win32_PingStatus -Filter ("Address='" + $_ + "'") -ComputerName .} | Select-Object -Property Address,ResponseTime,StatusCode

Один и тот же формат команды можно использовать для проверки связи со всеми компьютерами подсети. Например, при проверке частной сети, использующей номер сети 192.168.1.0 и стандартную маску подсети класса C (255.255.255.0), допустимы только адреса в диапазоне от 192.168.1.1 до 192.168.1.254 (0 всегда зарезервирован в качестве номера сети, а 255 используется для массовой рассылки по подсети).

Чтобы представить массив чисел от 1 до 254 в Windows PowerShell, используйте инструкцию 1..254. . Таким образом, полную проверку связи с подсетью можно осуществить, сформировав этот массив и добавляя его элементы к частичному адресу в инструкции проверки связи:

1..254| ForEach-Object -Process {Get-WmiObject -Class Win32_PingStatus -Filter ("Address='192.168.1." + $_ + "'") -ComputerName .} | Select-Object -Property Address,ResponseTime,StatusCode

Такой метод формирования диапазона адресов может быть использован в любых подобных случаях. Полный набор адресов можно сформировать следующим образом:

$ips = 1..254 | ForEach-Object -Process {"192.168.1." + $_}

Извлечение свойств сетевого адаптера

Ранее в данном руководстве пользователя упоминалось о возможности извлечения общих свойств конфигурации при помощи объекта Win32_NetworkAdapterConfiguration. Такие сведения о сетевом адаптере, как MAC-адреса и типы адаптеров, не относятся, строго говоря, к протоколу TCP/IP, но могут оказаться полезными для понимания того, что происходит в компьютере. Сводные данные можно получить при помощи следующей команды:

Get-WmiObject -Class Win32_NetworkAdapter -ComputerName .

Назначение домена DMS сетевому адаптеру

Чтобы назначить домен DNS для автоматического разрешения имен, нужно использовать метод Win32_NetworkAdapterConfiguration SetDNSDomain. Поскольку назначение домена DNS для каждого сетевого адаптера производится независимо, необходимо воспользоваться инструкцией ForEach-Object, что позволит назначить домен для каждого адаптера:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true -ComputerName . | ForEach-Object -Process { $_. SetDNSDomain("fabrikam.com") }

Здесь нужно использовать инструкцию фильтрации IPEnabled=true, поскольку даже в сети, использующей лишь протокол TCP/IP, некоторые сетевые адаптеры компьютера не являются настоящими адаптерами TCP/IP. Они представляют собой общие программные элементы, поддерживающие службы RAS, PPTP, QoS и т. п. для всех адаптеров, и не имеют собственного адреса.

Фильтрацию в команде можно осуществить при помощи командлета Where-Object вместо фильтра Get-WmiObject :

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -ComputerName . | Where-Object -FilterScript {$_.IPEnabled} | ForEach-Object -Process {$_.SetDNSDomain("fabrikam.com")}

Выполнение задач настройки DHCP

Изменение деталей DHCP, так же как и настройка DNS, включает работу с набором сетевых адаптеров. Существует несколько отдельных действий, выполняемых при помощи службы WMI. Мы рассмотрим несколько типичных действий.

Определение адаптеров, поддерживающих DHCP

Найти на компьютере адаптеры, поддерживающие DHCP, можно при помощи следующей команды:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName .

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

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName .

Извлечение свойств DHCP

Свойства адаптера, относящиеся к протоколу DHCP, обычно начинаются с DHCP, поэтому для отображения только этих свойств можно использовать параметр Property командлета Format-Table:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName . | Format-Table -Property DHCP*

Включение поддержки DHCP на каждом адаптере

Чтобы включить поддержку DHCP на всех адаптерах, используйте команду:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true -ComputerName . | ForEach-Object -Process {$_.EnableDHCP()}

Можно воспользоваться инструкцией Filter "IPEnabled=true and DHCPEnabled=false" во избежание включения поддержки DHCP для адаптеров, у которых она уже включена, но пропуск этого шага не приведет к появлению ошибок.

Отмена и обновление аренды адреса DHCP для отдельных адаптеров

Класс Win32_NetworkAdapterConfiguration использует методы ReleaseDHCPLease и RenewDHCPLease. Оба метода используются одинаково. Обычно их применяют лишь при необходимости отмены или обновления аренды адресов для адаптера в отдельной подсети. Простейший способ фильтрации адаптеров в подсети является выбор лишь тех адаптеров, которые используют шлюз для этой подсети. Например, следующая команда отменяет все аренды адресов DHCP для адаптеров на локальном компьютере, которые арендуют адреса DHCP на шлюзе 192.168.1.254:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName . | Where-Object -FilterScript {$_.DHCPServer -contains "192.168.1.254"} | ForEach-Object -Process {$_.ReleaseDHCPLease()}

Единственное отличие при обновлении аренды адреса DHCP состоит в вызове метода RenewDHCPLease вместо метода ReleaseDHCPLease:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName . | Where-Object -FilterScript {$_.DHCPServer -contains "192.168.1.254"} | ForEach-Object -Process {$_.ReleaseDHCPLease()}
Примечание.

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

Отмена и обновление аренды адреса DHCP для всех адаптеров

Отменить или обновить аренду адреса DHCP сразу для всех адаптеров можно при помощи методов ReleaseDHCPLeaseAll и RenewDHCPLeaseAll объекта Win32_NetworkAdapterConfiguration. Однако эту команду следует применять к классу WMI, а не к отдельному адаптеру, поскольку глобальная отмена и обновление аренды осуществляется на уровне класса, а не отдельного адаптера.

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

Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"}

Эту команду можно рассматривать как класс и использовать ее при вызове метода ReleaseDHCPAdapterLease. В следующей команде элементы конвейера Get-WmiObject и Where-Object ограничены круглыми скобками, в результате чего Windows PowerShell обрабатывает их первыми:

( Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ).ReleaseDHCPLeaseAll()

Такой же формат команды используется при вызове метода RenewDHCPLeaseAll:

( Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ).RenewDHCPLeaseAll()

Создание общего сетевого ресурса

Создать общий сетевой ресурс :можно при помощи метода Win32_Share Create:

(Get-WmiObject -List -ComputerName . | Where-Object -FilterScript {$_.Name -eq "Win32_Share"}).Create("C:\temp","TempShare",0,25,"test share of the temp folder")

Для этой же цели в Windows PowerShell можно использовать команду net share:

net share tempshare=c:\temp /users:25 /remark:"test share of the temp folder"

Удаление общего сетевого ресурса

Общий сетевой ресурс можно удалить при помощи объекта Win32_Share, но этот процесс немного отличается от процесса создания, поскольку требует получения отдельного общего ресурса, который должен быть удален, а не класса Win32_Share. Следующая инструкция удалит общий ресурс TempShare:

 (Get-WmiObject -Class Win32_Share -ComputerName . -Filter "Name='TempShare'").Delete()

В этом случае подойдет и выражение Net share:

PS> net share tempshare /delete
tempshare was deleted successfully.

Подключение сетевого диска, доступного в Windows

Командлет New-PSDrive позволяет создавать диски Windows PowerShell, но такие диски доступны только в Windows PowerShell. Для создания нового сетевого диска можно воспользоваться COM-объектом WScript.Network. Следующая команда отображает общий ресурс \\FPS01\users на локальный диск B:

(New-Object -ComObject WScript.Network).MapNetworkDrive("B:", "\\FPS01\users")

Так же работает и команда net use:

net use B: \\FPS01\users

Диски, отображенные при помощи объекта WScript.Network или команды net use, мгновенно становятся доступными в оболочке Windows PowerShell.