请解释此PowerShell脚本中“%i * g”的含义

时间:2019-01-16 17:04:42

标签: powershell foreach foreach-object

在PowerShell中工作时,我需要将CIDR表示法转换为IP起始地址和子网掩码表示法。

执行Google搜索时,我发现this Reddit posting challenge包含许多执行此任务的晦涩方式。

我发现特别有趣的是:

$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是什么意思?

ig是什么,我们在执行乘法吗?

1 个答案:

答案 0 :(得分:6)

For more examples, I'm going to refer you to my post in Programming Puzzles

%ForEach-Object的别名,该别名具有接受属性名称的参数集。

您在使用%| IPAddressToString时已经看到了这一点。

尽管该参数接受通配符,所以|% i*g表示调用名称与该模式匹配的成员,在这种情况下,该成员为i paddresstostrin g

该模式必须明确解析,因此尝试执行|% i*,您会看到一条错误消息,该错误会告诉您所有该模式可以匹配的成员。

这不是乘法的原因是它是一个字符串。由于它是命令的参数,因此不一定需要用引号引起来。