Format-Hex
将文件或其他输入显示为十六进制。
语法
Format-Hex
[-Path] <String[]>
[-Count <Int64>]
[-Offset <Int64>]
[<CommonParameters>]
Format-Hex
-LiteralPath <String[]>
[-Count <Int64>]
[-Offset <Int64>]
[<CommonParameters>]
Format-Hex
-InputObject <PSObject>
[-Encoding <Encoding>]
[-Count <Int64>]
[-Offset <Int64>]
[-Raw]
[<CommonParameters>]
说明
cmdlet Format-Hex
将文件或其他输入显示为十六进制值。 若要确定输出中的字符的偏移量,请将行最左侧的数字与该字符所在列顶部的数字相加。
cmdlet Format-Hex
可帮助你确定损坏文件的文件类型或可能没有文件扩展名的文件。 可以运行此 cmdlet,然后读取十六进制输出以获取文件信息。
对文件使用 Format-Hex
时,cmdlet 会忽略换行符,并在保留换行符的字符串中返回文件的全部内容。
示例
示例 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
cmdlet。 的十六进制输出 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 中引入的。
Type: | Int64 |
Position: | Named |
Default value: | Int64.MaxValue |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Encoding
指定输入字符串的编码。 这仅适用于 [string]
输入。 参数对数值类型没有影响。 输出值始终 utf8NoBOM
为 。
此参数的可接受值如下所示:
ascii
:使用 ASCII (7 位) 字符集的编码。bigendianunicode
:使用 big-endian 字节顺序以 UTF-16 格式进行编码。bigendianutf32
:使用 big-endian 字节顺序以 UTF-32 格式进行编码。oem
:使用 MS-DOS 和控制台程序的默认编码。unicode
:使用 little-endian 字节顺序以 UTF-16 格式进行编码。utf7
:以 UTF-7 格式进行编码。utf8
:以 UTF-8 格式进行编码。utf8BOM
:使用字节顺序标记 (BOM) 以 UTF-8 格式进行编码utf8NoBOM
:以 UTF-8 格式编码,不带字节顺序标记 (BOM)utf32
:以 UTF-32 格式进行编码。
从 PowerShell 6.2 开始, Encoding 参数还允许使用已注册代码页的数字 ID (如 -Encoding 1251
) 或已注册代码页的字符串名称 () -Encoding "windows-1251"
。 有关详细信息,请参阅 Encoding.CodePage 的 .NET 文档。
注意
不再建议使用 UTF-7*。 从 PowerShell 7.1 起,如果为 Encoding 参数指定utf7
,则会写入警告。
Type: | Encoding |
Accepted values: | ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32 |
Position: | Named |
Default value: | UTF8NoBOM |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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
将通过将所有类似对象组合在一起来处理具有多个输入类型的管道输入。 现在,它在通过管道时处理每个单独的对象,并且不会将对象组合在一起,除非类似对象是相邻的。
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-LiteralPath
指定文件的完整路径。 LiteralPath 的值与键入时完全相同。 此参数不接受通配符。 若要指定文件的多个路径,请使用逗号分隔路径。 如果 LiteralPath 参数包含转义字符,请将路径括在单引号中。 PowerShell 不会将单个带引号的字符串中的任何字符解释为转义序列。 有关详细信息,请参阅 about_Quoting_Rules。
Type: | String[] |
Aliases: | PSPath, LP |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Offset
这表示从十六进制输出的一部分跳过的字节数。
此参数是在 PowerShell 6.2 中引入的。
Type: | Int64 |
Position: | Named |
Default value: | 0 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Path
指定文件的路径。 使用点 (.
) 指定当前位置。 通配符 (*
) 被接受,可用于指定位置中的所有项目。 如果 Path 参数包含转义字符,请将路径括在单引号中。 若要指定文件的多个路径,请使用逗号分隔路径。
Type: | String[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-Raw
此参数不再执行任何操作。 保留该脚本是为了实现脚本兼容性。
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
输入
可以通过管道将字符串传递给此 cmdlet。
输出
此 cmdlet 返回 ByteCollection。 此对象表示字节的集合。 它包括将字节集合转换为格式类似于 返回 Format-Hex
的每行输出的字符串的方法。 输出还声明它们正在处理的字节类型。 如果指定 Path 或 LiteralPath 参数,则 对象包含包含每个字节的文件的路径。 如果传递字符串、布尔值、整数等,则会相应地对其进行标记。
备注
最右侧的输出列尝试将字节呈现为 ASCII 字符:
通常,每个字节都解释为 Unicode 码位,这意味着:
- 始终正确呈现可打印的 ASCII 字符
- 多字节 UTF-8 字符永远不会正确呈现
- 仅当 UTF-16 字符的高阶字节为
NUL
时才正确呈现。