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

[玩转系统] PowerShell 将 Guid 转换为字符串 [2 种方法]

作者:精品下载站 日期:2024-12-14 05:28:44 浏览:11 分类:玩电脑

PowerShell 将 Guid 转换为字符串 [2 种方法]


[玩转系统] PowerShell 将 Guid 转换为字符串 [2 种方法]

?TL;DR
在系统上使用 ToString() 方法.Guid 在 PowerShell 中将 GUID 转换为字符串。

使用 ToString() 方法:

$guid = [System.Guid]::NewGuid()
$guidString = $guid.ToString()
Write-Host $guid.GetType() - $guid
Write-Host $guidString.GetType() - $guidString

输出 :

System.Guid - 1acc6445-c9ed-4bee-a6f9-fcf36b0bb830
System.String - 1acc6445-c9ed-4bee-a6f9-fcf36b0bb830

在深入研究解决方案之前,让我们先了解一下 GUID 是什么。在 PowerShell 中,全局唯一标识符 (GUID) 是一个 128 位标识符,用于唯一标识对象,例如文件夹、文件、注册表项和其他系统资源。请记住,GUID 在一个文件夹中不应是唯一的,但它们在全球所有网络和计算机中都是唯一的,这使得它们在许多情况下都很有用。

重点是 GUID 是如何成为 128 位标识符的,特别是我们如何创建它。首先,我们可以使用 New-Guid cmdlet 生成一个 GUID,它返回 32 位十六进制数字,格式为 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 分隔连字符;每个十六进制数字代表 4 位,因此 32 位十六进制值代表 128 位。

为了更好地理解它,取一个随机生成的 GUID 作为 f81d4fae-7dec-11d0-a765-00a0c91e6bf6,它有五组用连字符分隔的十六进制数字。

GUID 表示:

f81d4fae-7dec-11d0-a765-00a0c91e6bf6
f81d4fae -> 8 Hexadecimal Digits -> 32 bits
7dec -> 4 Hexadecimal Digits -> 16 bits
11d0 -> 4 Hexadecimal Digits -> 16 bits
a765 -> 4 Hexadecimal Digits -> 16 bits
00a0c91e6bf6 -> 12 Hexadecimal Digits -> 48 bits
So:
f81d4fae-7dec-11d0-a765-00a0c91e6bf6 = 32-bit Hexadecimal Digits = 128 bits

每次我们生成一个 GUID 时,它都很长并且是随机生成的,因此两个或多个 GUID 相同的机会非常低,这使其成为唯一识别分布式环境中的对象的极其有效的方法。

使用ToString()方法

使用 ToString() 方法在 PowerShell 中将 GUID 转换为字符串。

使用 ToString() 方法:

$guid = [System.Guid]::NewGuid()
$guidString = $guid.ToString()
Write-Host $guid.GetType() - $guid
Write-Host $guidString.GetType() - $guidString

输出 :

System.Guid - 1acc6445-c9ed-4bee-a6f9-fcf36b0bb830
System.String - 1acc6445-c9ed-4bee-a6f9-fcf36b0bb830

我们使用 PowerShell .NET 框架提供的 Guid 类的 NewGuid() 方法来创建 Guid 结构的新实例。 NewGuid() 方法通常用于在 Windows 上创建临时文件夹。

我们将生成的 GUID 存储在 $guid 变量中,通过该变量链接 ToString() 方法,将其类型从 Guid 转换为 字符串。转换后的字符串存储在 $guidString 变量中。接下来,我们使用 Write-Host cmdlet 打印 $guid$guidString 的类型和值。但是,GetType() 方法检索了对象类型。

ToString() 方法与格式说明符结合使用

使用带有格式说明符的 ToString() 方法将 GUID 转换为 PowerShell 中的字符串。

将 ToString() 与格式说明符一起使用:

$guid = [System.Guid]::NewGuid()
$guidString = $guid.ToString("D")
Write-Host $guid.GetType() - $guid
Write-Host $guidString.GetType() - $guidString

输出 :

System.Guid - 24b9ca9d-5f9c-44d5-997b-7a411c8630e1
System.String - 24b9ca9d-5f9c-44d5-997b-7a411c8630e1

这个例子与我们在上一节中学到的相同。在这里,我们将 "D" 格式说明符作为参数传递给 ToString() 方法,以将 GUID 格式化为特定格式的字符串。在此示例中,转换后的字符串表示为 32 个十六进制数字的序列,分为五组;连字符分隔每个组;请参阅上面的输出。

您是否发现转换后的字符串的模式与我们在上一节中的示例代码中获得的模式相同?是的?您是正确的,因为 $guid.ToString("D")$guid.ToString() 产生的结果与 "D" 相同默认值。请参阅以下示例进行演示。

使用带/不带格式说明符的 ToString():

$guid = [System.Guid]::NewGuid()
$guidString1 = $guid.ToString("D")
$guidString2 = $guid.ToString()
Write-Host $guid.GetType() - $guid
Write-Host $guidString1.GetType() - $guidString1
Write-Host $guidString2.GetType() - $guidString2

输出 :

System.Guid - f098496d-3972-4e3a-8513-d5737722e2be
System.String - f098496d-3972-4e3a-8513-d5737722e2be
System.String - f098496d-3972-4e3a-8513-d5737722e2be

请注意,ToString()ToString("D") 生成的字符串具有相同的格式。因此,让我们使用 N 格式说明符练习代码,它会生成不带连字符的精确字符串。

将 ToString() 与 D 和 N 格式说明符结合使用:

$guid = [System.Guid]::NewGuid()
$guidString1 = $guid.ToString("D")
$guidString2 = $guid.ToString("N")
Write-Host $guid.GetType() - $guid
Write-Host $guidString1.GetType() - $guidString1
Write-Host $guidString2.GetType() - $guidString2

输出 :

System.Guid - 7b799c22-dc9c-49e0-8131-5668ff8480c9
System.String - 7b799c22-dc9c-49e0-8131-5668ff8480c9
System.String - 7b799c22dc9c49e081315668ff8480c9

我们还有其他格式说明符,您可以在下面找到:

N

32位数字:00000000000000000000000000000000

D

32 位数字,以 - 分隔:00000000-0000-0000-0000-000000000000

B

32 位数字,以 - 分隔,括在 {} 中:{00000000-0000-0000-0000-000000000000}

P

32 位数字,以 - 分隔,括在() 中:(00000000-0000-0000-0000-000000000000)

X

04 个十六进制值包含在 {} 中,其中第 4 个值是 8 个十六进制值的子集,也包含在 {} 中:{0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00} }

上表中,0代表一个数字。如果给定的格式说明符为 null 或空字符串 (""),则将使用 "D"。所有格式说明符都可以使用大写或小写;两种形式将具有相同的效果。请注意,如果给出任何无效的格式说明符,ToString() 方法将生成 FormatException。

使用 [string] 类型加速器

使用[string]类型加速器在PowerShell中将指定的GUID转换为字符串。

使用字符串类型加速器:

$guid = [System.Guid]::NewGuid()
$guidString = [string]$guid
Write-Host $guid.GetType() - $guid
Write-Host $guidString.GetType() - $guidString

输出 :

System.Guid - 9bc7a33a-b415-428f-92b2-1245b6cb03ed
System.String - 9bc7a33a-b415-428f-92b2-1245b6cb03ed

在此代码片段中,我们没有使用 ToString() 方法,而是使用 [string] 类型加速器,该加速器转换了 $guid 的类型从GuidString

这就是 powerShell 将 Guid 转换为 String 的全部内容。

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

取消回复欢迎 发表评论:

关灯