我正在使用 WMI 查找 HBA 卡上端口的 WWN(全球通用名称)。我可以找回 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") }
答案1
以下是几种方法(我相信还有其他方法):
[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
答案2
你可以这样做:
[System.BitConverter]::ToString([Byte[]](1,2,3,4,5,6,7,8)) -replace "-"
具体如下:
[Byte[]](1,2,3,4,5,6,7,8)
这将创建一个具有 8 个元素的 ByteArray,每个元素分别包含值 1 到 8。
[System.BitConverter]::ToString(<ByteArray type Object>)
这会将 ByteArray 转换为破折号分隔的字符串,如下所示:
01-02-03-04-05-06-07-08
最后,
-replace "-"
这将删除破折号。