另一种选择是在值前加上
0x
并将其强制转换为
int64
:
$Next_MAC_Address = ([int64]"0x$Last_MAC_Address"+1).ToString('X12')
您也可以使用格式化运算符 (-f
) 而不是 ToString()
方法:
(参考链接)
$Next_MAC_Address = '{0:X12}' -f ([int64]"0x$Last_MAC_Address"+1)
然而,有一件事情值得注意。 MAC地址 不仅是没有任何内部结构的随机6字节数字。实际上,它们由两部分组成。前3个字节形成组织唯一标识符(OUI),这是一个供应商特定的前缀(00-15-5D是属于Microsoft的OUI之一)。只有最后3个字节是随机数,是用于识别OUI所确定的供应商的每个卡的唯一标识符。
考虑到这一点,您可能希望相应地拆分MAC地址,例如:
$oui, $nid = $Last_MAC_Address -split '(?<=^[0-9a-f]{6})(?=[0-9a-f]{6}$)'
或者像这样:
$oui = $Last_MAC_Address.Substring(0, 6)
$nid = $Last_MAC_Address.Substring(6, 6)
只增加网卡标识符,仅在不会溢出的情况下进行增加:
if ($nid -ne 'ffffff') {
$Next_MAC_Address = "{0}{1:X6}" -f $oui, ([int64]"0x$nid"+1)
} else {
Write-Error 'MAC address overflow.'
}
([Int64]::Parse('00155DE10B73', 'HexNumber') + 1).ToString('X12')
- user4003407