Como exibir uma matriz de bytes no PowerShell como uma cadeia unida de dígitos hexadecimais?

4

Estou usando o WMI para descobrir qual é o meu WWN (nome mundial) para minha porta em um cartão HBA. Eu posso recuperar o WWN, mas ele está contido como uma matriz de 8 bytes. Eu gostaria de converter essa matriz de bytes em uma seqüência de 16 dígitos hexadecimais para facilitar a exibição.

Esta é a consulta que estou usando para imprimir cada número em sua própria linha. Existe uma maneira de converter isso para ter as 8 linhas combinadas em uma única linha?

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

Acho que o seguinte pode ser usado para testar apenas os dados de byte, mas ainda sou novo no PowerShell.

[byte[]] 1,2,3,4,5,6,7,8 | foreach { $_.ToString("X2") }
    
por Jason 26.08.2010 / 20:30

2 respostas

4

Aqui estão algumas maneiras (tenho certeza de que há outras):

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

ou

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

ou

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

Saída para cada um dos itens acima:

0102030405060708
    
por 29.08.2010 / 20:38
2

Uma maneira de fazer isso é assim:

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

Aqui está um resumo:

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

Isso cria um ByteArray com 8 elementos, cada um contendo o valor de 1 a 8, respectivamente.

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

Isso converte o ByteArray em uma string delimitada por traço da seguinte forma:

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

Por fim,

-replace "-"

Isso remove o traço.

    
por 30.09.2016 / 10:29