Есть ли простой для запоминания способ фильтрации «Get-NetIPAddress», зная только часть IP-адреса?

#windows #powershell

#Windows #powershell

Вопрос:

В последнее время я больше работаю с сетью на виртуальной машине Windows и контейнерах. Эти экземпляры наиболее легко предоставляют доступ PowerShell для отладки сетевых проблем. Я знаю основные сетевые команды, *-Net* , но мне сложно фильтровать выходные данные на основе объектов. В частности, я обнаружил, что хочу фильтровать Get-NetIPAddress только те объекты, которые имеют значения IPAddress в определенной подсети. Это довольно просто, когда вы знаете точный IPAddress ( Get-NetIPAddress | where IPAddress -eq 127.0.0.1 ), и я видел способы фильтрации по подсети, но не то, что легко запомнить. Я бы предпочел не искать это каждый раз или устанавливать пользовательский модуль PS. Итак, мой вопрос в том, как вы можете фильтровать выходные Get-NetIPAddress данные для IP-адресов в подсети способом, аналогичным тому, как вы знаете точный IP-адрес : where IPAddress -eq 127.0.0.1 .

Комментарии:

1. Если вопрос заключается в выполнении частичного сопоставления, то вы можете сделать Get-NetIPAddress | where IPAddress -like '127.0.*' . Если вопрос в том, можете ли вы найти IP, который принадлежит определенной подсети, это сложнее.

2. @AdminOfThings спасибо! запишите это как ответ, чтобы я мог дать вам очки.

3. Я добавил его. Спасибо

4. вы также можете использовать [version] ускоритель типов, чтобы вы могли сравнивать диапазон адресов IPv4. [version]'127.0.0.1' -lt [version]'127.9.9.9' даст вам True . [ усмешка ]

Ответ №1:

Для частичного сопоставления вы можете использовать оператор -like or -match .

-like принимает сопоставление подстановочных знаков. * соответствует любому количеству символов. ? соответствует одному из любых символов. [] содержит диапазон символов, которые должны совпадать один раз.

 # Matches 127.0.<anything>
Get-NetIPAddress | where IPAddress -like '127.0.*'

# Matches 127.0.0.<one character>
Get-NetIPAddress | where IPAddress -like '127.0.0.?'

# Matches 127.0.0.<one number between 0 and 9>
Get-NetIPAddress | where IPAddress -like '127.0.0.[0-9]'
  

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

 # Matches 127.0.0.<one number between 0 and 9>
Get-NetIPAddress | where IPAddress -match '127.0.0.[0-9]'
# Matches 127.<any number>.<any number>.<any number>
Get-NetIPAddress | where IPAddress -match '127.[0-9] .[0-9] .[0-9] '
# Matches 127.0.<one number between 0 and 9>.<two digit number>
Get-NetIPAddress | where IPAddress -match '127.0.[0-9].[0-9]{2}'