Пожалуйста, объясните, что означает "% i*g" в этом скрипте PowerShell.
При работе в PowerShell мне нужно было преобразовать нотацию CIDR в начальный IP-адрес и маску подсети.
Выполняя поиск в Google, я обнаружил эту проблему с публикацией в Reddit, которая содержала много неясных способов выполнить эту задачу.
Один, который я нашел особенно интересным, был:
$C = 13
[ipaddress](4.GB-(4GB-shr$C))|% i*g
Мне потребовалось время, чтобы увидеть это -shr$C
был просто PowerShell -shr
оператор без пробелов перед $C
ссылка на переменную.
Затем мне нужно было искать, чтобы найти это %
это псевдоним для Foreach-Object
,
Просто запрашивая значение [ipaddress](4.GB-(4GB-shr$C))
Я получил:
Address : 63743
AddressFamily : InterNetwork
ScopeId :
IsIPv6Multicast : False
IsIPv6LinkLocal : False
IsIPv6SiteLocal : False
IsIPv6Teredo : False
IsIPv4MappedToIPv6 : False
IPAddressToString : 255.248.0.0
Который показал мне свойства объекта IPAddress. Результат, который мне нужен, это IPAddressToString
свойство, которое я мог бы получить с помощью %| IPAddressToString
или как-то принудить PowerShell выдавать объект в виде строки.
Поэтому вопрос сейчас в том, что делает синтаксис % i*g
имею в виду?
Что такое i
а также g
и мы выполняем умножение?
1 ответ
Для большего количества примеров, я собираюсь отослать Вас к моему посту в Программировании Пазлов.
%
это псевдоним для ForEach-Object
который имеет набор параметров, который принимает имя свойства.
Вы уже видели это в вашем использовании %| IPAddressToString
,
Параметр принимает подстановочные знаки, поэтому |% i*g
означает вызвать члена, имя которого соответствует этому шаблону, который в этом случае i
paddresstostrin
g
,
Шаблон должен разрешаться однозначно, поэтому попробуйте сделать |% i*
и вы увидите ошибку, которая предупреждает всех участников, что шаблон может соответствовать.
Причина не умножения в том, что это строка. Поскольку это параметр команды, строка не обязательно должна заключаться в кавычки.