2

在 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意思?

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

4

1 回答 1

6

有关更多示例,我将向您推荐我在 Programming Puzzles 中的帖子

%是一个别名,ForEach-Object它有一个接受属性名称的参数集。

您已经在使用%| IPAddressToString.

该参数接受通配符,因此|% i*g意味着调用名称与该模式匹配的成员,在本例中为i paddresstostrin g.

模式必须明确地解决,所以尝试这样做|% i*,你会看到一个错误,它有助于告诉你模式可以匹配的所有成员。

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

于 2019-01-16T17:23:44.750 回答