Пожалуйста, объясните, что означает "% i * g" в этом скрипте PowerShell. - PullRequest
0 голосов
/ 16 января 2019

При работе в 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 Ответ

0 голосов
/ 16 января 2019

Для большего количества примеров, я собираюсь отослать Вас к моему посту в Программировании Пазлов .

% - это псевдоним для ForEach-Object, в котором есть набор параметров, который принимает имя свойства.

Вы уже видели это при использовании %| IPAddressToString.

Параметр принимает подстановочные знаки, поэтому |% i*g означает вызов члена, имя которого соответствует этому шаблону, который в данном случае равен i paddresstostrin g.

Шаблон должен разрешаться однозначно, поэтому попробуйте выполнить |% i*, и вы увидите ошибку, которая предупреждает всех участников о том, что шаблон может соответствовать.

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

...