PowerShell'de bir bayt dizisi birleştirilmiş onaltılık basamak dizisi olarak nasıl gösterilir?


5

WWN'imin (Dünya Çapında Adının) HBA kartındaki bağlantı noktası için ne olduğunu öğrenmek için WMI kullanıyorum. WWN'yi geri alabilirim ancak 8 baytlık bir dizi olarak bulunuyor. Bu bayt dizisini kolay görüntüleme için 16 onaltılık basamak dizisine dönüştürmek istiyorum.

Bu, her numarayı kendi satırında yazdırmak için kullandığım sorgu. Bunu 8 çizginin tek bir çizgide birleştirilmesi için dönüştürmenin bir yolu var mı?

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

Aşağıdakilerin sadece bayt verileriyle test edilmek için kullanılabileceğini düşünüyorum ama hala PowerShell için yeniyim.

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

Yanıtlar:


5

İşte birkaç yol var (Eminim ki diğerleri de vardır):

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

veya

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

veya

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

Yukarıdakilerin her biri için çıktı:

0102030405060708

Bu beni doğru yola yönlendirir. İhtiyacım olanı yapan aşağıdaki komutu verdim. gwmi -namespace root \ wmi -class MSFC_FibrePortNPIVAttributes | WWPN'i seçin | foreach {[array] :: Geri ($ _. WWPN); [BitConverter] :: ToUInt64 ($ _. WWPN, 0) .ToString ("X")}
Jason

3

Bunu yapabilmenin bir yolu şöyle:

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

İşte bir döküm:

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

Bu, her biri sırasıyla 1 ile 8 arasında bir değer içeren 8 öğeli bir ByteArray oluşturur.

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

Bu, ByteArray öğesini şu şekilde tire ile sınırlandırılmış bir dizeye dönüştürür:

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

Son olarak,

-replace "-"

Bu, çizgi kaldırır.


1
Bunun ne yaptığını açıklayabilir misin?
Burgi

1
Bu soruyu cevaplayabilse de, neden böyle olduğunu açıklayabilirseniz daha iyi bir cevap olabilir .
DavidPostill
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.