如何在 PowerShell 中将字节数组显示为连接的十六进制数字字符串?

Jas*_*son 6 powershell fiber

我正在使用 WMI 找出 HBA 卡上我的端口的 WWN(全球通用名称)是什么。我可以取回 WWN,但它包含为 8 字节数组。我想将此字节数组转换为 16 位十六进制数字的字符串,以便于显示。

这是我用来在自己的行中打印出每个数字的查询。有没有办法将其转换为将 8 行合并为一行?

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

我认为以下内容可用于仅使用字节数据进行测试,但我还是 PowerShell 的新手。

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

Den*_*son 6

这里有几种方法(我确定还有其他方法):

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

或者

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

或者

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

以上各项的输出:

0102030405060708
Run Code Online (Sandbox Code Playgroud)


小智 5

你可以这样做的一种方法是这样的:

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

这是一个细分:

[Byte[]](1,2,3,4,5,6,7,8)
Run Code Online (Sandbox Code Playgroud)

这将创建一个包含 8 个元素的 ByteArray,每个元素分别包含值 1 到 8。

[System.BitConverter]::ToString(<ByteArray type Object>)
Run Code Online (Sandbox Code Playgroud)

这会将 ByteArray 转换为以破折号分隔的字符串,如下所示:

01-02-03-04-05-06-07-08
Run Code Online (Sandbox Code Playgroud)

最后,

-replace "-"
Run Code Online (Sandbox Code Playgroud)

这将删除破折号。