Format-Hex

以十六進位顯示檔案或其他輸入。

語法

Path

Format-Hex
    [-Path] <String[]>
    [-Count <Int64>]
    [-Offset <Int64>]
    [<CommonParameters>]

LiteralPath

Format-Hex
    -LiteralPath <String[]>
    [-Count <Int64>]
    [-Offset <Int64>]
    [<CommonParameters>]

ByInputObject

Format-Hex
    -InputObject <PSObject>
    [-Encoding <Encoding>]
    [-Count <Int64>]
    [-Offset <Int64>]
    [-Raw]
    [<CommonParameters>]

Description

指令長檔(cmdlet) Format-Hex 以十六進位值顯示檔案或其他輸入。 要確定字元與輸出的偏移量,請將該字元列最左邊的數字加到該字元欄頂端的數字上。

這個 Format-Hex cmdlet 可以幫助你判斷損壞檔案或可能沒有副檔名的檔案類型。 你可以執行這個 cmdlet,然後讀取十六進位輸出來取得檔案資訊。

在檔案中使用 Format-Hex 時,指令本會忽略換行字元,並以一個字串回傳整個檔案內容,並保留換行字元。

範例

範例 1:取得字串的十六進位表示

此指令回傳字串的十六進位值。

'Hello World' | Format-Hex
   Label: String (System.String) <2944BEC3>

          Offset Bytes                                           Ascii
                 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
          ------ ----------------------------------------------- -----
0000000000000000 48 65 6C 6C 6F 20 57 6F 72 6C 64                Hello World

字串 Hello World 會被送入管線到 Format-Hex 指令檔。 十六 Format-Hex 進位輸出顯示字串中每個字元的值。

範例 2:從十六進位輸出中尋找檔案類型

此範例使用十六進位輸出來決定檔案類型。 cmdlet 會顯示檔案的完整路徑及十六進位值。

為了測試以下指令,請在本地電腦複製一個現有的 PDF 檔案,並將複製的檔案重新命名為 File.t7f。

Format-Hex -Path .\File.t7f -Count 48
   Label: C:\Test\File.t7f

          Offset Bytes                                           Ascii
                 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
          ------ ----------------------------------------------- -----
0000000000000000 25 50 44 46 2D 31 2E 35 0D 0A 25 B5 B5 B5 B5 0D %PDF-1.5..%????.
0000000000000010 0A 31 20 30 20 6F 62 6A 0D 0A 3C 3C 2F 54 79 70 .1 0 obj..<</Typ
0000000000000020 65 2F 43 61 74 61 6C 6F 67 2F 50 61 67 65 73 20 e/Catalog/Pages

cmdlet Format-Hex 使用 Path 參數來指定目前目錄 File.t7f中的檔名 。 這個副檔名 .t7f 不常見,但十六進位輸出 %PDF 顯示它是 PDF 檔案。 在此範例中,使用 Count 參數限制輸出為檔案的前 48 位元組。

範例 3:格式化不同資料型態的陣列

此範例使用不同資料型態陣列來突顯 在管線中如何 Format-Hex 處理這些資料。

它會將每個物件都經過管線,並逐一處理。 但如果是數值資料,且相鄰物件也是數值,則會將它們分組成單一輸出區塊。

'Hello world!', 1, 1138, 'foo', 'bar', 0xdeadbeef, 1gb, 0b1101011100 , $true, $false |
    Format-Hex
   Label: String (System.String) <24F1F0A3>

          Offset Bytes                                           Ascii
                 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
          ------ ----------------------------------------------- -----
0000000000000000 48 65 6C 6C 6F 20 77 6F 72 6C 64 21             Hello world!

   Label: Int32 (System.Int32) <2EB933C5>

          Offset Bytes                                           Ascii
                 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
          ------ ----------------------------------------------- -----
0000000000000000 01 00 00 00 72 04 00 00                         �   r�

   Label: String (System.String) <4078B66C>

          Offset Bytes                                           Ascii
                 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
          ------ ----------------------------------------------- -----
0000000000000000 66 6F 6F                                        foo

   Label: String (System.String) <51E4A317>

          Offset Bytes                                           Ascii
                 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
          ------ ----------------------------------------------- -----
0000000000000000 62 61 72                                        bar

   Label: Int32 (System.Int32) <5ADF167B>

          Offset Bytes                                           Ascii
                 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
          ------ ----------------------------------------------- -----
0000000000000000 EF BE AD DE 00 00 00 40 5C 03 00 00             ï¾-Þ   @\�

   Label: Boolean (System.Boolean) <7D8C4C1D>

          Offset Bytes                                           Ascii
                 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
          ------ ----------------------------------------------- -----
0000000000000000 01 00 00 00 00 00 00 00                         �

參數

-Count

這代表應包含在十六進位輸出中的位元組數。

此參數是在 PowerShell 6.2 中引進的。

參數屬性

類型:Int64
預設值:Int64.MaxValue
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Encoding

指定輸入字串的編碼方式。 這只適用於 [string] 輸入。 該參數對數值類型不影響。 輸出值總是 utf8NoBOM。

此參數可接受的值如下:

  • ascii:使用 ASCII (7 位) 字元集的編碼方式。
  • ansi:使用符合當前文化特性的 ANSI 代碼頁的編碼方式。 此選項已在PowerShell 7.4中新增。
  • bigendianunicode:使用高位元組序以 UTF-16 格式編碼。
  • bigendianutf32:使用大端字節順序以 UTF-32 格式進行編碼。
  • oem:使用 MS-DOS 和控制台程序的預設編碼方式。
  • unicode:使用小端位元組順序,以UTF-16格式進行編碼。
  • utf7:以UTF-7格式編碼。
  • utf8:以UTF-8格式編碼。
  • utf8BOM:以 UTF-8 格式(含位元組順序標記 BOM)編碼
  • utf8NoBOM:以 UTF-8 格式編碼,不含位元組順序標記【BOM】
  • utf32:以UTF-32格式編碼。

從 PowerShell 6.2 開始,編碼 參數也允許已註冊代碼頁的數值識別元(例如 -Encoding 1251)或已註冊代碼頁的字串名稱(例如 -Encoding "windows-1251")。 如需詳細資訊,請參閱 Encoding.CodePage的 .NET 檔。

從 PowerShell 7.4 開始,您可以使用 Ansi 參數的 值,傳遞目前文化的 ANSI 代碼頁的數值 ID,而不需要手動指定。

Note

UTF-7* 不再建議使用。 自 PowerShell 7.1 起,如果您為 utf7 參數指定 ,則會撰寫警告。

參數屬性

類型:Encoding
預設值:UTF8NoBOM
接受的值:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
支援萬用字元:False
不要顯示:False

參數集

ByInputObject
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-InputObject

指定要格式化的物件。 輸入包含 物件的變數,或輸入取得物件的命令或表達式。

只有某些純 量 類型 [System.IO.FileInfo] 和才被支援。

支援的標量類型包括:

  • [string]、[char]
  • [byte]、[sbyte]
  • [int16]、[uint16]、[short]、[ushort]
  • [int]、[uint]、[int32]、[uint32]、
  • [long]、[ulong]、[int64]、[uint64]
  • [single]、[float]、[double]
  • [boolean]

在 PowerShell 6.2 之前,我 Format-Hex 會透過將所有相似物件分組來處理多重輸入類型的管線輸入。 現在,它會處理每個物件在管線中經過的個別物件,除非相鄰的物件,否則不會將物件分組在一起。

參數屬性

類型:PSObject
預設值:None
支援萬用字元:False
不要顯示:False

參數集

ByInputObject
Position:Named
必要:True
來自管線的值:True
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-LiteralPath

指定檔案的完整路徑。 LiteralPath 的值會按原本輸入的方式使用。 此參數不接受萬用字元。 若要指定多條檔案路徑,請用逗號分隔這些路徑。 如果 LiteralPath 參數包含轉義字元,請以單引號包圍路徑。 PowerShell 不會將單一引號字串中的任何字元解讀為跳脫序列。 如需詳細資訊,請參閱 about_Quoting_Rules。

參數屬性

類型:

String[]

預設值:None
支援萬用字元:False
不要顯示:False
別名:PSPath, LP

參數集

LiteralPath
Position:Named
必要:True
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Offset

這代表從十六進位輸出中跳過的位元組數。

此參數是在 PowerShell 6.2 中引進的。

參數屬性

類型:Int64
預設值:0
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Path

指定檔案的路徑。 用點(.)來指定目前的位置。 通配字元(*)被接受,可用來指定該地點的所有項目。 若 Path 參數包含跳脫字元,則以單引號包圍路徑。 若要指定多條檔案路徑,請用逗號分隔這些路徑。

參數屬性

類型:

String[]

預設值:None
支援萬用字元:True
不要顯示:False

參數集

Path
Position:0
必要:True
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Raw

這個參數現在已經不再有作用了。 保留此訊息以促進劇本相容性。

參數屬性

類型:SwitchParameter
預設值:None
支援萬用字元:False
不要顯示:False

參數集

ByInputObject
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

CommonParameters

此 cmdlet 支援常見參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters。

輸入

String

您可以使用管線將字串傳送到此 cmdlet。

輸出

ByteCollection

此指令小子回傳一個 ByteCollection。 這個物件代表一組位元組。 它包含將位元組集合轉換為格式類似每行輸出 Format-Hex的字串的方法。 輸出也會說明正在處理的位元組類型。 如果你指定 Path 或 LiteralPath 參數,物件會包含包含每個位元組的檔案路徑。 如果你傳遞字串、布林、整數等,它們會被適當標註。

備註

PowerShell 包含下列 Format-Hex的別名:

  • 所有平臺:
    • fhx

最右邊的輸出欄嘗試將位元組渲染成 ASCII 字元:

一般來說,每個位元組都被解讀為 Unicode 的碼點,這表示:

  • 可列印的 ASCII 字元總是正確呈現
  • 多位元組 UTF-8 字元從未正確渲染
  • UTF-16 字元只有在其高階位元組為 時 NUL才會正確渲染。