当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] Format-Hex (Microsoft.PowerShell.Utility)

作者:精品下载站 日期:2024-12-14 02:07:31 浏览:15 分类:玩电脑

Format-Hex (Microsoft.PowerShell.Utility)


Format-Hex

模块 :Microsoft.PowerShell.Utility

将文件或其他输入显示为十六进制。

句法

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>]

描述

Format-Hex cmdlet 将文件或其他输入显示为十六进制值。要确定某个字符相对于输出的偏移量,请将该行最左侧的数字与该字符的列顶部的数字相加。

Format-Hex cmdlet 可以帮助您确定损坏的文件或可能没有文件扩展名的文件的文件类型。您可以运行此 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

Format-Hex cmdlet 使用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 中引入的。

类型 :

整型64

位置:

命名

默认值:

Int64.MaxValue

必需的:

False

接受管道输入:

False

接受通配符:

False

-Encoding

指定输入字符串的编码。这仅适用于 [string] 输入。该参数对数字类型没有影响。输出值始终为 utf8NoBOM

该参数可接受的值如下:

  • ascii:使用 ASCII(7 位)字符集的编码。
  • ansi:使用当前区域性的 ANSI 代码页的编码。此选项是在 PowerShell 7.4 中添加的。
  • bigendianunicode:使用 big-endian 字节顺序以 UTF-16 格式进行编码。
  • bigendianutf32:使用 big-endian 字节顺序以 UTF-32 格式进行编码。
  • oem:使用 MS-DOS 和控制台程序的默认编码。
  • unicode:使用小端字节顺序以 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 文档。

从 PowerShell 7.4 开始,您可以使用 Encoding 参数的 Ansi 值来传递当前区域性 ANSI 代码页的数字 ID,而无需手动指定。

笔记

不再建议使用UTF-7*。从 PowerShell 7.1 开始,如果为 Encoding 参数指定 utf7,则会写入警告。

类型 :

编码

接受的值:

ASCII、BigEndianUnicode、BigEndianUTF32、OEM、Unicode、UTF7、UTF8、UTF8BOM、UTF8NoBOM、UTF32

位置:

命名

默认值:

UTF8无BOM

必需的:

False

接受管道输入:

False

接受通配符:

False

-InputObject

指定要格式化的对象。输入包含对象的变量或键入获取对象的命令或表达式。

仅支持某些标量类型和[system.io.fileinfo]

支持的标量类型有:

  • [字符串][字符]
  • [字节][sbyte]
  • [int16][uint16][short][ushort]
  • [int][uint][int32][uint32]
  • [long][ulong][int64][uint64]
  • [单][浮点][双]
[boolean]

在 PowerShell 6.2 之前,Format-Hex 会通过将所有类似对象分组在一起来处理具有多种输入类型的管道输入。现在,它在每个单独的对象通过管道时对其进行处理,并且不会将对象分组在一起,除非相似的对象相邻。

类型 :

PS对象

位置:

命名

默认值:

None

必需的:

True

接受管道输入:

True

接受通配符:

False

-LiteralPath

指定文件的完整路径。 LiteralPath 的值完全按照键入的方式使用。该参数不接受通配符。要指定多个文件路径,请用逗号分隔路径。如果 LiteralPath 参数包含转义字符,请将路径用单引号引起来。 PowerShell 不会将单引号字符串中的任何字符解释为转义序列。有关更多信息,请参阅 about_Quoting_Rules。

类型 :

String[]

别名:

PSPath, LP

位置:

命名

默认值:

None

必需的:

True

接受管道输入:

False

接受通配符:

False

-Offset

这表示作为十六进制输出的一部分要跳过的字节数。

此参数是在 PowerShell 6.2 中引入的。

类型 :

整型64

位置:

命名

默认值:

0

必需的:

False

接受管道输入:

False

接受通配符:

False

-Path

指定文件的路径。使用点 (.) 指定当前位置。接受通配符 (*),它可用于指定某个位置中的所有项目。如果Path参数包含转义字符,请将路径用单引号引起来。要指定多个文件路径,请用逗号分隔路径。

类型 :

String[]

位置:

0

默认值:

None

必需的:

True

接受管道输入:

False

接受通配符:

True

-Raw

该参数不再执行任何操作。保留它是为了脚本兼容性。

类型 :

SwitchParameter

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

输入

字符串

您可以通过管道将字符串传递给此 cmdlet。

输出

字节集合

此 cmdlet 返回ByteCollection。该对象表示字节的集合。它包括将字节集合转换为格式类似于 Format-Hex 返回的每行输出的字符串的方法。输出还表明正在处理的字节类型。如果指定 PathLiteralPath 参数,则该对象包含包含每个字节的文件的路径。如果您传递字符串、布尔值、整数等,它将被适当标记。

笔记

PowerShell 包含以下 Format-Hex 别名:

  • 所有平台:

      fhx

    输出的最右列尝试将字节呈现为 ASCII 字符:

    通常,每个字节都被解释为一个 Unicode 代码点,这意味着:

    • 可打印 ASCII 字符始终正确呈现
    • 多字节 UTF-8 字符永远无法正确呈现
    • 仅当 UTF-16 字符的高位字节恰好为 NUL 时,UTF-16 字符才能正确呈现。

    您需要 登录账户 后才能发表评论

    取消回复欢迎 发表评论:

    关灯