Другим вариантом является префиксом значения с 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 является одним из OUI, принадлежащих Microsoft). Только последние 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.'
}
'([Int64] :: Parse ('00155DE10B73', 'HexNumber') + 1). ToString ('X12') ' – PetSerAl
Чувак! Вы легенда, большое вам спасибо – Conan1989