问题描述
我有一个名为$Ip
的变量。该变量的内部IP地址为“ 172.13.23.34”。我想获取第三个八位位组或172.13之间的下一个字符。和.34(在这种情况下为字符串数字23),并存储在另一个变量中,以使用以下命令设置VLANID。
$Ip = 172.13.23.34
$VLANID = ?
Set-Netadapter -Name "Ethernet" -VlanID $VLANID
如何获取此特定信息?
解决方法
-split
,基于正则表达式的字符串拆分 operator 或基于文字-子字符串的Split()
方法是正确的工具通常,使用分隔符将字符串拆分为标记,有一种更简单的解决方案:
# Trick: [version] splits the string into its numerical components.
# The .Build property value corresponds to the 3rd octet.
PS> ([version] '172.13.23.34').Build
23
用于版本号的[version]
(System.Version
)类型可以理解由.
分隔的4个组件编号,它们看起来像IPv4地址。这些实例的属性映射到IPv4地址的八位字节,如下所示:
-
.Major
...第一个八位位组(172
) -
.Minor
...第二个八位位组(13
) -
.Build
...第三个八位位组(23
) -
.Revision
...第4个八位位组(34
)
注意:
-
如果需要所有个八位位组,请考虑使用
[IPAddress]
类型的iRon's helpful answer。 -
也就是说,
[version]
比[IPAddress]
有一个优势:它实现了System.IComparable
接口,这意味着您比较 IPv4地址;例如,[version] '172.9.23.34' -lt [version] '172.13.23.34'
是$true
使用.Net [IPAddress]
类:
([IPAddress]'172.13.23.34').GetAddressBytes()
172
13
23
34