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

[玩转系统] 在 PowerShell 中生成随机字符串 [6 种方法]

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

在 PowerShell 中生成随机字符串 [6 种方法]


[玩转系统] 在 PowerShell 中生成随机字符串 [6 种方法]

使用 [System.Guid]

要在 PowerShell 中生成随机字符串:

  • 使用 NewGuid() 方法创建全局唯一标识符。
  • 使用 ToString() 方法将 GUID(在上一步中创建)转换为字符串格式。
  • 使用 Write-Host cmdlet 打印随机字符串。

使用 System.Guid 类:

$randomString = ([System.Guid]::NewGuid()).ToString()
Write-Host $randomString

输出 :

95ffbbf8-f721-4cf2-886d-dcdbfae00665

New-Guid() 是 [System.Guid] 类的静态方法,我们用它来创建随机 GUID(全局唯一标识符)。如果需要在脚本中创建唯一 ID,我们可以使用此方法。

接下来,我们将 ToString() 方法与 New-Guid() 链接起来,将其类型更改为我们存储在 中的 String $randomString 变量。最后,我们使用 Write-Host cmdlet 将 $randomString 的值打印到 PowerShell 控制台。

使用 .NET RNGCryptoServiceProvider

要在 PowerShell 中生成随机字符串:

  • 使用 New-Object cmdlet 创建字节数组。
  • 使用 New-Object cmdlet 创建 .NET RNGCryptoServiceProvider 类的对象。
  • 使用 GetBytes() 方法用随机字节填充字节数组(在第一步中创建)。
  • 使用 ToBase64String() 方法将字节数组转换为 Base64 编码的字符串。
  • 使用 Write-Host cmdlet 将转换后的字符串发送到 PowerShell 控制台。

使用 RNGCryptoServiceProvider 类:

$randomBytesArray = New-Object byte[] 32
$rngObject = New-Object System.Security.Cryptography.RNGCryptoServiceProvider
$rngObject.GetBytes($randomBytesArray)
$randomString = [System.Convert]::ToBase64String($randomBytesArray)
Write-Host $randomString

输出 :

6nh6ArzjvQSh6dW7DQ2C/3sTCZiKWpq/THDOTKHwg8E=

首先,我们使用 New-Object cmdlet 创建一个 byte 类型数组并将其引用存储在 $randomBytesArray 变量中。该数组将保存我们稍后将在代码中生成的随机字节。 New-Object cmdlet 属于 Microsoft.PowerShell.Utility 模块,用于创建对象。

我们再次使用 New-Object cmdlet 创建 RNGCryptoServiceProvider 类的实例,并将其存储在 $rngObject 变量中。为什么创建这个对象?因为 RNGCryptoServiceProvider 类有助于以加密安全的方式生成随机字节。我们使用了 GetBytes() 方法,该方法将 $randomBytesArray 作为参数并用随机字节填充它。

之后,我们使用[System.Convert]类的ToBase64String()方法,该方法以$randomBytesArray为参数,将其转换为base64编码的字符串并存储在 $randomString 变量中。最后,我们使用 Write-Host cmdlet 在 PowerShell 控制台上打印 $randomString

将 System.Random 与 ForForEach 循环结合使用

要在 PowerShell 中生成 10 个字符的随机字符串:

  • ToCharArray() 方法与字符串值链接起来以创建字符数组。
  • 使用New-Object cmdlet 创建System.Random 类的实例。
  • 使用 for 循环执行相同的作业 10 次。
  • 对于每次迭代:

    • 使用 Next() 方法创建随机索引。
  • 从上一步中创建的随机索引中检索字符。
  • 使用+= 连接从指定随机索引检索到的当前字符。
  • 使用 Write-Host 在 PowerShell 控制台上打印随机字符串。
  • 使用 for 循环:

    $charsArray = "abcdefghijkmnopqrstuvwxyzABCEFGHJKLMNPQRSTUVWXYZ0123456789!"#$%&''()*+,-./:;<=>?@[\]^_`{|}~".ToCharArray()
    $randomObject = New-Object System.Random
    $randomString = ""
    for ($i = 0; $i -lt 10; $i++) {
        $randomIndex = $randomObject.Next(0, $charsArray.Length)
        $randomCharacter = $charsArray[$randomIndex]
        $randomString += $randomCharacter
    }
    Write-Host $randomString

    输出 :

    mQ7NgZmX!0

    首先,我们使用 ToCharArray() 方法创建一个存储在 $charArray 变量中的字符数组。之后,我们使用 New-Object cmdlet 创建 System.Random 类的实例并将其存储在 $randomObject 变量中;我们实例化了 System.Random 类来创建随机索引。我们稍后会在 for 循环中看到它。

    接下来,我们使用空字符串声明并初始化 $randomString 变量。之后,我们使用 for 循环进行 10 次迭代;对于每次迭代,我们使用 Next() 方法创建随机索引并将其存储在 $randomIndex 变量中。请注意,随机索引始终在 0数组长度 的范围内。

    我们使用此 $randomIndex$charArray 检索字符并将其保存在 $randomCharacter 变量中。此外,我们使用以 += 表示的串联运算符将当前 $randomCharacter$randomString 连接起来。最后,我们使用 Write-Host cmdlet 在 PowerShell 控制台上打印 $randomString 变量的值。

    以下是上述解决方案的替代方法。我们使用 ForEach 循环进行迭代,它包含的代码行相对较少。

    使用 ForEach 循环:

    $randomObject = New-Object System.Random
    $randomString=""
    1..10 | ForEach { $randomString = $randomString + [char]$randomObject.Next(33,126) }
    Write-Host $randomString

    输出 :

    b?YDha&3>,

    使用 System.Web 模块

    使用 System.Web 模块中的 GeneratePassword() 方法在 PowerShell 中生成随机字符串。

    使用GeneratePassword()方法:

    [Reflection.Assembly]::LoadWithPartialName("System.Web")
    [System.Web.Security.Membership]::GeneratePassword(20,2)

    输出 :

    C&h%qk+Cxra7%s9=ZTq@

    对于此解决方案,我们必须使用 Reflection.Assembly 类的 LoadWithPartialName() 方法将 System.Web 加载到 PowerShell 中。导入后,我们使用了 Membership 类的 GeneratePassword() 方法,该类位于 System.Web.Security 命名空间中。

    GeneratePassword() 方法有两个参数;首先是密码的长度,其次是密码的复杂性。在我们的例子中,我们得到了长度为 20 个字符的密码,复杂度为 2 ,表示除数字和字母之外的 2 非字母数字字符。成功执行上述脚本后,我们将获得一个随机密码字符串,您可以在上面看到。

    Get-Random Cmdlet 与 -join 运算符结合使用

    使用 Get-Random cmdlet 和 -join 运算符在 PowerShell 中生成由小写字母和数字组成的随机字符串。

    将 Get-Random Cmdlet 与 -join 运算符结合使用:

    -join ((48..57) + (97..122) | Get-Random -Count 10 | % {[char]$_})

    输出 :

    m8w6dqfn5t

    在了解上述命令的作用之前,我们先将其分解为几个部分并进行学习。 (48..57) + (97..122) 创建一个 Unicode 值数组,表示 a-z 之间的字符 ASCII 代码 (97-122) 和 0-9 (48-57)。该数组通过 Get-Random cmdlet 进行管道传输,该 cmdlet 选择随机 10 值,因为我们使用 -Count 指定了 10 的计数

    现在,所选的 10 个随机字符被传递到下一个进程 % {[char]$_},该进程将它们通过管道传输到 ForEach-Object cmdlet 并将每个 Unicode 值转换为其相应的字符。最后,我们使用 -join 运算符来连接所有字符。因此,上述命令将生成并连接 10 个随机字符,其中每个字符都是小写字母或数字。或者,我们可以使用以下命令来包含大写字母和特殊字符。

    使用 Get-Random cmdlet 和 -join 运算符在 PowerShell 中生成包含小写字母、大写字母、数字和特殊字符的随机字符串。

    将 Get-Random Cmdlet 与 -join 运算符结合使用:

    -join ((33..126) | Get-Random -Count 10 | % {[char]$_})

    输出 :

    )H2T\n#,|v

    到目前为止,我们生成了一个随机字符串;如果我们要在 PowerShell 中创建 n 个随机字符串怎么办?

    使用 for 循环和 get-random 来创建 n 个随机字符串

    使用 for 循环和 get-random 在 PowerShell 中生成 n 个随机字符串。

    使用 for 循环生成 n 个随机字符串:

    for($i=0; $i -lt 5; $i++){
        ([char[]]([char]'a'..[char]'z' + [char]'A'..[char]'Z') + 0..9 | sort {get-random})[0..9] -join ''
    }

    输出 :

    M5tV34J81u
    2ErYS5uly6
    jZ3ufpCBeh
    qBdsjZi1Cp
    CO2Ez3iDWY

    此示例与前面的示例类似,但生成 5 随机字母数字字符串。如何?我们使用 for 循环执行 5 次迭代,每个随机字符串迭代一次。在每次迭代中,我们通过连接数字、小写字母和大写字母创建了一个字母数字字符数组,并随机排序。

    [0..9] 从随机字符串中选择前 10 个字符,并使用 -join 运算符将它们连接起来。对所有 5 字符串重复此过程。

    这就是如何在 PowerShell 中生成随机字符串的全部内容。

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

    取消回复欢迎 发表评论:

    关灯