4

Я использую WMI, чтобы узнать, что мой WWN (World Wide Name) для моего порта на карте HBA. Я могу вернуть WWN, но он содержится в виде 8-байтового массива. Я хотел бы преобразовать этот байтовый массив в строку из 16 шестнадцатеричных цифр для удобства отображения.

Это запрос, который я использую, чтобы распечатать каждое число в отдельной строке. Есть ли способ преобразовать это, чтобы объединить 8 строк в одну строку?

gwmi -namespace root\wmi -class MSFC_FibrePortNPIVAttributes | select -expand WWPN | foreach { $_.ToString("X2") }

Я думаю, что следующее может быть использовано для тестирования только с байтовыми данными, но я все еще новичок в PowerShell.

[byte[]] 1,2,3,4,5,6,7,8 | foreach { $_.ToString("X2") }

2 ответа2

5

Вот несколько способов (я уверен, что есть и другие):

[byte[]](1,2,3,4,5,6,7,8) | foreach { $string = $string + $_.ToString("X2") }
Write-Output $string

или же

-join ([byte[]](1,2,3,4,5,6,7,8) |  foreach {$_.ToString("X2") } )

или же

([byte[]](1,2,3,4,5,6,7,8) |  foreach { $_.ToString("X2") }) -join ""

Выход для каждого из вышеперечисленных:

0102030405060708
3

Один из способов сделать это можно так:

[System.BitConverter]::ToString([Byte[]](1,2,3,4,5,6,7,8)) -replace "-"

Вот разбивка:

[Byte[]](1,2,3,4,5,6,7,8)

Это создает ByteArray с 8 элементами, каждый из которых содержит значения от 1 до 8 соответственно.

[System.BitConverter]::ToString(<ByteArray type Object>)

Это преобразует ByteArray в строку с разделителями тире следующим образом:

01-02-03-04-05-06-07-08

И, наконец,

-replace "-"

Это удаляет черту.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .