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才會正確渲染。