因此,基本上我想要实现的是从文本文件中获取MAC地址并将其值加1。
在Google / StackOverflow墙上猛烈抨击了几个小时,以为有一个我没想到的概念。
电源外壳:
$Last_MAC_Address = (Get-Content -LiteralPath "\\UNC\Path\Last MAC Address.txt")
Write-Host ($Last_MAC_Address)
# Output: 00155DE10B73
$Next_MAC_Address = (($Last_MAC_Address | Format-Hex) + 1)
另一个选择是在值前加上前缀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)
并仅增加NIC标识符,并且仅在不会溢出的情况下:
if ($nid -ne 'ffffff') {
$Next_MAC_Address = "{0}{1:X6}" -f $oui, ([int64]"0x$nid"+1)
} else {
Write-Error 'MAC address overflow.'
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句