#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}'