web-dev-qa-db-ja.com

PowerShellでバイトの配列を16進数の結合文字列として表示するにはどうすればよいですか?

WMIを使用して、HBAカードのポートのWWN(ワールドワイドネーム)を調べています。 WWNを取り戻すことはできますが、8バイトの配列として含まれています。簡単に表示できるように、このバイト配列を16進数の16進数の文字列に変換したいと思います。

これは、各番号を独自の行に出力するために使用しているクエリです。これを変換して、8行を1行に結合する方法はありますか?

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") }
5
Jason

ここにいくつかの方法があります(他にもあると確信しています):

[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

あなたがそれをすることができる1つの方法はそうです:

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

内訳は次のとおりです。

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

これにより、それぞれが値1から8を含む8つの要素を持つByteArrayが作成されます。

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

これにより、ByteArrayが次のようにダッシュで区切られた文字列に変換されます。

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

最後に、

-replace "-"

これにより、ダッシュが削除されます。

3
Dave Sexton