所以我基本上想要实现的是从文本文件中获取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')
您也可以使用format operator(-f)而不是ToString()方法:
$Next_MAC_Address = '{0:X12}' -f ([int64]"0x$Last_MAC_Address"+1)
但是,有一件事值得注意. MAC addresses不仅是随机的6字节数字,没有任何内部结构.它们实际上由两部分组成.前3个字节构成Organizationally Unique Identifier(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.'
}
相关文章
转载注明原文:powershell – 如何将十六进制编码的字符串转换为十六进制整数 - 代码日志