Поделиться через


Выполнение сетевых задач

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

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

Список 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. Можно использовать параметр ExcludePropertySelect-Object для скрытия свойств с именами, начинающимися с WINS или IPX.

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

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

Пингование компьютеров

Вы можете выполнить простое выполнение команды ping на компьютере с помощью Win32_PingStatus. Данная команда выполняет ping, но возвращает длинный вывод.

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

Ответ от Win32_PingStatus содержит 29 свойств. Вы можете использовать Format-Table для выбора наиболее интересных свойств. Параметр Format-TableAutoSize изменяет размер столбцов таблицы, чтобы они отображались правильно в 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 указывает на успешный ping.

Вы можете использовать массив для отправки ping на несколько компьютеров с помощью одной команды. Поскольку существует несколько адресов, используйте 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. Можно выполнить пинг всей подсети, добавив каждое значение в диапазоне к частичному адресу в операторе ping.

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-домен для автоматического разрешения имен, используйте метод SetDNSDomainWin32_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, можно использовать параметр свойства 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_NetworkAdapterConfiguration, ReleaseDHCPLeaseAll и RenewDHCPLeaseAll. Однако команда должна применяться к классу WMI, а не конкретному адаптеру, так как освобождение и продление аренды глобально выполняется в классе, а не на определенном адаптере. Командлет Invoke-CimMethod может вызывать методы класса.

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName ReleaseDHCPLeaseAll

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

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName RenewDHCPLeaseAll

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

Чтобы создать сетевую папку, используйте метод CreateWin32_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 по умолчанию. Дополнительные сведения см. в следующей статье: