Выполнение задач по работе с сетями

Этот пример применяется только к платформам Windows.

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

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

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

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Select-Object -ExpandProperty IPAddress

Учитывая, что свойство IPAddress объекта Win32_NetworkAdapterConfiguration является массивом, необходимо использовать параметр ExpandProperty со значением Select-Object для просмотра всего списка адресов.

10.0.0.1
fe80::60ea:29a7:a233:7cb7
2601:600:a27f:a470:f532:6451:5630:ec8b
2601:600:a27f:a470:e167:477d:6c5c:342d
2601:600:a27f:a470:b021:7f0d:eab9:6299
2601:600:a27f:a470:a40e:ebce:1a8c:a2f3
2601:600:a27f:a470:613c:12a2:e0e0:bd89
2601:600:a27f:a470:444f:17ec:b463:7edd
2601:600:a27f:a470:10fd:7063:28e9:c9f3
2601:600:a27f:a470:60ea:29a7:a233:7cb7
2601:600:a27f:a470::2ec1

С помощью командлета Get-Member можно увидеть, что свойство IPAddress является массивом:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Get-Member -Name IPAddress
   TypeName: Microsoft.Management.Infrastructure.CimInstance#root/cimv2/Win32_NetworkAdapterConfiguration

Name      MemberType Definition
----      ---------- ----------
IPAddress Property   string[] IPAddress {get;}

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

Перечисление данных IP-конфигурации

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

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true

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

В современных сетях TCP/IP вам, скорее всего, больше не понадобятся свойства IPX или WINS. Вы можете использовать параметр ExcludeProperty командлета Select-Object, чтобы скрыть свойства, имена которых начинаются на WINS или IPX.

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Select-Object -ExcludeProperty IPX*,WINS*

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

Подключение компьютеров

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

Get-CimInstance -Class Win32_PingStatus -Filter "Address='127.0.0.1'"

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

Get-CimInstance -Class Win32_PingStatus -Filter "Address='127.0.0.1'" |
    Format-Table -Property Address,ResponseTime,StatusCode -Autosize
Address   ResponseTime StatusCode
-------   ------------ ----------
127.0.0.1            0          0

Значение 0 свойства StatusCode указывает на успешно выполненную проверку связи.

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

'127.0.0.1','localhost','bing.com' |
  ForEach-Object -Process {
    Get-CimInstance -Class Win32_PingStatus -Filter ("Address='$_'") |
      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 в PowerShell, используйте выражение 1..254. Таким образом, полную проверку связи с подсетью можно осуществить, добавив все значения в диапазоне к частичному адресу в операторе проверки связи:

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

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

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

Получение свойств сетевого адаптера

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

Get-CimInstance -Class Win32_NetworkAdapter -ComputerName .

Назначение домена DNS для сетевого адаптера

Чтобы назначить домен DNS для автоматического разрешения имен, нужно использовать метод SetDNSDomain класса Win32_NetworkAdapterConfiguration. Параметр Запрос со значением Invoke-CimMethod принимает строку WQL-запроса. Командлет вызывает метод, указанный для каждого экземпляра, возвращаемого запросом.

$wql = 'SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=True'
$args = @{ DnsDomain = 'fabrikam.com'}
Invoke-CimMethod -MethodName SetDNSDomain -Arguments $args -Query $wql

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

Выполнение задач конфигурации DHCP

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

Поиск адаптеров с поддержкой DHCP

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

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=$true"

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

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=$true and DHCPEnabled=$true"

Получение свойств DHCP

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

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter  "IPEnabled=$true and DHCPEnabled=$true" |
  Format-Table -Property DHCP*

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

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

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE IPEnabled=True and DHCPEnabled=False'
Invoke-CimMethod -MethodName ReleaseDHCPLease -Query $wql

Использование оператора фильтра IPEnabled=True and DHCPEnabled=False позволяет избежать включения DHCP, когда он уже включен.

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

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

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE DHCPServer="192.168.1.1"'
Invoke-CimMethod -MethodName ReleaseDHCPLease -Query $wql

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

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE DHCPServer="192.168.1.1"'
Invoke-CimMethod -MethodName RenewDHCPLease -Query $wql

Примечание.

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

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

Отменить или обновить аренду адресов DHCP сразу для всех адаптеров можно с помощью методов Win32_NetworkAdapterConfigurationReleaseDHCPLeaseAll и RenewDHCPLeaseAll. Однако эту команду следует применять к классу WMI, а не к отдельному адаптеру, поскольку глобальная отмена и обновление аренды осуществляется на уровне класса, а не отдельного адаптера. Командлет Invoke-CimMethod может вызывать методы класса.

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName ReleaseDHCPLeaseAll

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

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName RenewDHCPLeaseAll

Создание сетевой папки

Создать сетевую папку можно с помощью метода Createкласса Win32_Share:

Invoke-CimMethod -ClassName Win32_Share -MethodName Create -Arguments @{
    Path = 'C:\temp'
    Name = 'TempShare'
    Type = [uint32]0 #Disk Drive
    MaximumAllowed = [uint32]25
    Description = 'test share of the temp folder'
}

Эта команда эквивалентна следующей команде net share в Windows:

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

Чтобы вызвать метод класса WMI, который принимает параметры, необходимо определить доступные параметры и типы этих параметров. Например, можно вывести список методов Win32_Class с помощью следующих команд:

(Get-CimClass -ClassName Win32_Share).CimClassMethods
Name          ReturnType Parameters                                   Qualifiers
----          ---------- ----------                                   ----------
Create            UInt32 {Access, Description, MaximumAllowed, Name…} {Constructor, Implemented, MappingStrings, Stati…
SetShareInfo      UInt32 {Access, Description, MaximumAllowed}        {Implemented, MappingStrings}
GetAccessMask     UInt32 {}                                           {Implemented, MappingStrings}
Delete            UInt32 {}                                           {Destructor, Implemented, MappingStrings}

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

(Get-CimClass -ClassName Win32_Share).CimClassMethods['Create'].Parameters
Name            CimType Qualifiers                                  ReferenceClassName
----            ------- ----------                                  ------------------
Access         Instance {EmbeddedInstance, ID, In, MappingStrings…}
Description      String {ID, In, MappingStrings, Optional}
MaximumAllowed   UInt32 {ID, In, MappingStrings, Optional}
Name             String {ID, In, MappingStrings}
Password         String {ID, In, MappingStrings, Optional}
Path             String {ID, In, MappingStrings}
Type             UInt32 {ID, In, MappingStrings}

Также можно ознакомиться с документацией по методу Create класса Win32_Share.

Удаление сетевой папки

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

$wql = 'SELECT * from Win32_Share WHERE Name="TempShare"'
Invoke-CimMethod -MethodName Delete -Query $wql

Подключение сетевой диск, доступный для Windows

Командлет New-PSDrive может создать диск PowerShell, сопоставленный с сетевой папкой.

New-PSDrive -Name "X" -PSProvider "FileSystem" -Root "\\Server01\Public"

Однако диски, созданные таким образом, доступны только сеансу PowerShell, где они создаются. Чтобы сопоставить диск, доступный за пределами PowerShell (или с другими сеансами PowerShell), необходимо использовать параметр "Сохранить ".

New-PSDrive -Persist -Name "X" -PSProvider "FileSystem" -Root "\\Server01\Public"

Примечание.

Постоянно сопоставленные диски могут быть недоступны при работе в контексте с повышенными привилегиями. Этот режим используется по умолчанию для Windows UAC. Дополнительные сведения см. в следующей статье: