如何使用 PowerShell 生成随机字符串

  1. 使用 Get-Random Cmdlet 生成 PowerShell 中的随机字符串
  2. 使用 GeneratePassword() 函数生成 PowerShell 中的随机密码
  3. 使用 New-Guid Cmdlet 生成 PowerShell 中的随机字符串
  4. 使用 Get-Random Cmdlet 和字符集生成 PowerShell 中的随机字符串
  5. 结论
如何使用 PowerShell 生成随机字符串

在管理活动目录时,导入具有唯一临时密码的批量用户等任务可能会很具挑战性。幸运的是,PowerShell 提供了有效的解决方案来生成随机字符串,以简化这些任务。

在本文中,我们将探讨如何使用 PowerShell 中的不同方法来实现这一目标。

使用 Get-Random Cmdlet 生成 PowerShell 中的随机字符串

PowerShell 提供了一个称为 Get-Random 的本机命令,它可以选择随机字符或数字。当我们向 Get-Random 命令提供一个项目数组时,它会从该集合中随机选择一个或多个对象。

在创建密码时,我们可以使用不同的 input 参数(特殊字符、数字、大写字母和小写字母)调用 Get-Random cmdlet 四次,连接结果字符串,并使用另一个 Get-Random 调用对它们进行洗牌。

在下面的示例中,我们定义了一个名为 $TokenSet 的哈希表,用于存储大写字母(U)、小写字母(L)、数字(N)和特殊字符(S)的字符集。这行代码 $variablename = Get-Random -Count 5 -InputObject $TokenSet.U 从字符集(ULNS)中随机生成 5 个字符并将其存储在变量中($Upper$Lower$Number$Special)。

然后,我们将从每个集合中随机选择的字符合并成一个名为 $StringSet 的字符集。最后,我们通过从 $StringSet 中选择生成 15 个字符的随机字符串,然后将它们组合在一起形成最终密码。

示例代码:

 powershellCopy$TokenSet = @{
    U = [Char[]]'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    L = [Char[]]'abcdefghijklmnopqrstuvwxyz'
    N = [Char[]]'0123456789'
    S = [Char[]]'!"#$%&''()*+,-./:;<=>?@[\]^_`{|}~'
}
    
$Upper = Get-Random -Count 5 -InputObject $TokenSet.U
$Lower = Get-Random -Count 5 -InputObject $TokenSet.L
$Number = Get-Random -Count 5 -InputObject $TokenSet.N
$Special = Get-Random -Count 5 -InputObject $TokenSet.S

$StringSet = $Upper + $Lower + $Number + $Special

(Get-Random -Count 15 -InputObject $StringSet) -join ''

输出:

 textCopy9ZimEXDW*@xo?12

上述代码每次都会生成不同的字符串。然而,它涉及多次调用 Get-Random cmdlet,这可能会使脚本更长,并且处理时间更慢。

下一节将讨论如何只用几行代码实现相同的功能。

使用 GeneratePassword() 函数生成 PowerShell 中的随机密码

如果您需要创建特定于密码的字符串,可以使用来自 [System.Web.Security] 命名空间的 GeneratePassword() 函数。要使用此功能,您必须先加载 System.Web 库。

 powershellCopy[Reflection.Assembly]::LoadWithPartialName("System.Web")

加载后,我们可以运行 GeneratePassword() 函数来随机生成一个密码。

在下面的代码中,我们使用 [System.Web.Security.Membership] 命名空间访问 GeneratePassword() 函数。

示例代码:

 powershellCopy[System.Web.Security.Membership]::GeneratePassword(15, 2)

输出:

 textCopyQQjj*LJ:e=YZ)Fo

从上面的示例代码可以看到,GeneratePassword() 函数接受两个参数:

  1. 第一个参数接受一个整数值,表示所需密码的总字符数。

  2. 第二个参数接受一个整数值,表示密码所需的特殊字符数。

然而,这段代码并不保证密码中至少包含一个数字字符。为了确保至少有一个数字字符,您可以使用以下代码。

示例代码:

 powershellCopydo {
    $pwd = [System.Web.Security.Membership]::GeneratePassword(15, 2)
} until ($pwd -match '\d')

$pwd

首先,使用 do 关键字创建一个循环来生成密码,并确保它包含至少一个数字字符。然后,使用这行代码 [System.Web.Security.Membership]::GeneratePassword(15, 2) 随机生成一个包含 2 个特殊字符的 15 个字符的密码,并将其存储在 $pwd 变量中。

循环重复,直到生成的密码至少包含一个数字字符。

输出:

 textCopyY4UkK4)G+lannRd

只需几行代码,上面的输出每次生成不同的字符串,并确保生成的字符串中至少有一个数字字符。

使用 New-Guid Cmdlet 生成 PowerShell 中的随机字符串

PowerShell 提供了 New-Guid cmdlet 来生成随机 GUID(全局唯一标识符)。您可以将这些 GUID 用作各种目的的随机字符串,包括密码。

在下面的示例中,我们使用 [System.Guid]::NewGuid() 生成一个随机 GUID(全局唯一标识符),然后将生成的 GUID 转换为字符串表示并将其存储在 $randomString 变量中。

示例代码:

 powershellCopy$randomString = [System.Guid]::NewGuid().ToString()

$randomString

输出:

 textCopyde5881dc-a546-43da-9b89-0bae712406b1

输出将生成一个随机字符串。

使用 Get-Random Cmdlet 和字符集生成 PowerShell 中的随机字符串

您还可以通过定义自定义字符集并使用 Get-Random cmdlet 来生成随机字符串。这种方法允许您对用于随机字符串的字符集进行更多控制。

以下是一个示例。

示例代码:

 powershellCopy$length = 10

$characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.ToCharArray()
$randomString = -join ($characters | Get-Random -Count $length)

$randomString

首先,我们定义随机字符串的所需长度并将其存储在变量 $length 中。

然后,我们定义将用于生成随机字符串的字符($characters)作为字符数组。.ToCharArray() 方法将字符串转换为其单个字符的数组。

接下来,我们创建一个指定长度的字符串($randomString),通过随机选择字符数组中的字符,并将所选字符连接在一起形成最终随机字符串。最后,我们打印生成的随机字符串。

输出:

 textCopy9lQSruF40i

输出将通过选择 $characters 中的字符来生成随机字符串。

结论

本文为您提供了一系列方法,以在 PowerShell 中生成随机字符串,确保您拥有用于管理独特密码和其他活动目录任务的正确工具。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

相关文章 - PowerShell String