如何使用 PowerShell 生成随机字符串
-
使用
Get-Random
Cmdlet 生成 PowerShell 中的随机字符串 -
使用
GeneratePassword()
函数生成 PowerShell 中的随机密码 -
使用
New-Guid
Cmdlet 生成 PowerShell 中的随机字符串 -
使用
Get-Random
Cmdlet 和字符集生成 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
从字符集(U
、L
、N
、S
)中随机生成 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()
函数接受两个参数:
-
第一个参数接受一个整数值,表示所需密码的总字符数。
-
第二个参数接受一个整数值,表示密码所需的特殊字符数。
然而,这段代码并不保证密码中至少包含一个数字字符。为了确保至少有一个数字字符,您可以使用以下代码。
示例代码:
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 中生成随机字符串,确保您拥有用于管理独特密码和其他活动目录任务的正确工具。
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn