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

[玩转系统] PowerShell 随机密码生成器

作者:精品下载站 日期:2024-12-14 05:21:56 浏览:16 分类:玩电脑

PowerShell 随机密码生成器


最近,我的一位客户要求我创建一个随机密码生成器。我建议使用 PowerShell。在本教程中,我将向您展示如何使用 PowerShell 创建随机密码生成器。

使用 PowerShell 生成随机密码

现在,让我向您展示使用 PowerShell 生成随机密码的不同方法。

方法 1:使用 Get-Random Cmdlet

PowerShell 中的 Get-Random cmdlet 可用于生成随机字符并将其组合成密码。这是一个分步示例:

function New-RandomPassword {
    param (
        [int]$length = 12
    )

    $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()'
    $password = -join ((1..$length) | ForEach-Object { $characters[(Get-Random -Minimum 0 -Maximum $characters.Length)] })
    return $password
}

$password = New-RandomPassword -length 16
Write-Output $password

在此脚本中:

  • 我们定义一个函数New-RandomPassword,它接受密码长度参数。
  • $characters 变量包含密码的所有可能字符。
  • 我们使用 ForEach-Object 循环从 $characters 字符串中选择随机字符,并将它们加入到密码中。

执行上述 PowerShell 脚本后,它将生成一个随机密码,如下图所示。我使用 Visual Studio Code 来执行这些脚本。

[玩转系统] PowerShell 随机密码生成器

查看在 PowerShell 中生成随机字符串

方法 2:使用 System.Web.Security.Membership 类

System.Web.Security.Membership 类提供了另一种生成随机密码的方法。使用方法如下:

Add-Type -AssemblyName System.Web
$password = [System.Web.Security.Membership]::GeneratePassword(12, 2)
Write-Output $password

在此示例中,GeneratePassword() 方法采用两个参数:

  • 第一个参数指定密码的长度。
  • 第二个参数指定非字母数字字符的数量。

该方法简单有效,可以快速生成安全密码,但需要添加程序集。

方法 3:使用 .NET 中的 SecureRandom

为了获得更安全的方法,您可以使用 System.Security.Cryptography 命名空间来生成随机密码。这是一个例子:

function New-SecureRandomPassword {
    param (
        [int]$length = 12
    )

    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()'
    $bytes = New-Object byte[] $length
    [System.Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($bytes)
    $password = -join ($bytes | ForEach-Object { $chars[$_ % $chars.Length] })
    return $password
}

$password = New-SecureRandomPassword -length 16
Write-Output $password

在此脚本中:

  • 我们使用RNGCryptoServiceProvider来生成加密安全的随机字节。
  • 然后,这些字节会映射到 $chars 字符串中的字符以形成密码。

查看如何在 PowerShell 中生成随机数?

在 PowerShell 中使用不同字符集生成复杂密码

这是一个非常常见的要求,您可能需要在 PowerShell 中使用不同的字符集生成复杂的密码。

为了确保您的密码包含混合的字符类型(大写、小写、数字、符号),您可以组合不同的字符集并打乱它们。这是一个例子:

function New-ComplexPassword {
    param (
        [int]$length = 12
    )

    $lower = 'abcdefghijklmnopqrstuvwxyz'
    $upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    $digits = '0123456789'
    $symbols = '!@#$%^&*()'

    $allChars = $lower + $upper + $digits + $symbols
    $password = -join ((1..$length) | ForEach-Object { $allChars[(Get-Random -Minimum 0 -Maximum $allChars.Length)] })

    # Ensure at least one character from each set
    $password += $lower[(Get-Random -Minimum 0 -Maximum $lower.Length)]
    $password += $upper[(Get-Random -Minimum 0 -Maximum $upper.Length)]
    $password += $digits[(Get-Random -Minimum 0 -Maximum $digits.Length)]
    $password += $symbols[(Get-Random -Minimum 0 -Maximum $symbols.Length)]

    # Shuffle the password
    $password = -join ($password.ToCharArray() | Sort-Object { Get-Random })
    return $password.Substring(0, $length)
}

$password = New-ComplexPassword -length 16
Write-Output $password

在此脚本中:

  • 我们为小写字母、大写字母、数字和符号定义单独的字符集。
  • 我们确保密码至少包含每组中的一个字符。
  • 我们打乱字符以随机化顺序。

我执行了上面的 PowerShell 脚本,您可以在下面的屏幕截图中看到输出:

[玩转系统] PowerShell 随机密码生成器

查看 PowerShell 随机字生成器

在 PowerShell 中生成不带特殊字符的随机密码

有时,您在 PowerShell 中生成随机密码时不希望包含任何特殊字符。

Get-Random cmdlet 可用于从指定的集合中生成随机字符。以下是如何生成不带特殊字符的随机密码的示例:

function New-RandomPassword {
    param (
        [int]$length = 12
    )

    $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
    $password = -join ((1..$length) | ForEach-Object { $characters[(Get-Random -Minimum 0 -Maximum $characters.Length)] })
    return $password
}

$password = New-RandomPassword -length 16
Write-Output $password

在此脚本中:

  • 我们定义一个函数New-RandomPassword,它接受密码长度参数。
  • $characters 变量包含密码的所有可能字符(不包括特殊字符)。
  • 我们使用 ForEach-Object 循环从 $characters 字符串中选择随机字符,并将它们加入到密码中。

这是输出,如下面的屏幕截图所示。随机密码不包含特殊字符。

[玩转系统] PowerShell 随机密码生成器

您还可以在 PowerShell 中使用不带任何特殊字符的不同字符集。

为了确保您的密码包含混合字符类型(大写、小写、数字)且不含特殊字符,您可以组合不同的字符集并打乱它们。这是一个例子:

function New-ComplexPassword {
    param (
        [int]$length = 12
    )

    $lower = 'abcdefghijklmnopqrstuvwxyz'
    $upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    $digits = '0123456789'

    $allChars = $lower + $upper + $digits
    $password = -join ((1..$length) | ForEach-Object { $allChars[(Get-Random -Minimum 0 -Maximum $allChars.Length)] })

    # Ensure at least one character from each set
    $password += $lower[(Get-Random -Minimum 0 -Maximum $lower.Length)]
    $password += $upper[(Get-Random -Minimum 0 -Maximum $upper.Length)]
    $password += $digits[(Get-Random -Minimum 0 -Maximum $digits.Length)]

    # Shuffle the password
    $password = -join ($password.ToCharArray() | Sort-Object { Get-Random })
    return $password.Substring(0, $length)
}

$password = New-ComplexPassword -length 16
Write-Output $password

在此脚本中:

  • 我们为小写、大写和数字定义单独的字符集。
  • 我们确保密码至少包含每组中的一个字符。
  • 我们打乱字符以随机化顺序。

在 PowerShell 中生成带有特殊字符的随机密码

现在,让我向您展示如何在 PowerShell 中生成带有特殊字符的随机密码。

PowerShell 中的 Get-Random cmdlet 可用于生成随机字符并将其组合成密码。以下是包含特殊字符的分步示例:

function New-RandomPassword {
    param (
        [int]$length = 12
    )

    $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()'
    $password = -join ((1..$length) | ForEach-Object { $characters[(Get-Random -Minimum 0 -Maximum $characters.Length)] })
    return $password
}

$password = New-RandomPassword -length 16
Write-Output $password

在此脚本中:

  • 我们定义一个函数New-RandomPassword,它接受密码长度参数。
  • $characters 变量包含密码的所有可能字符,包括特殊字符。
  • 我们使用 ForEach-Object 循环从 $characters 字符串中选择随机字符,并将它们加入到密码中。

输出如下面的屏幕截图所示。该随机密码包含特殊字符。

[玩转系统] PowerShell 随机密码生成器

您还可以使用使用System.Web.Security.Membership类生成带有特殊字符的随机密码。

System.Web.Security.Membership 类提供了一种生成包含特殊字符的随机密码的简单方法。使用方法如下:

Add-Type -AssemblyName System.Web
$password = [System.Web.Security.Membership]::GeneratePassword(12, 2)
Write-Output $password

在这个例子中:

  • GeneratePassword 方法采用两个参数:密码长度和非字母数字字符(特殊字符)的数量。
  • 该方法简单有效,可以快速生成安全密码。

结论

在本教程中,我解释了有关“PowerShell 随机密码生成器”的所有内容。在这里,我解释了如何使用不同的方法在 PowerShell 中生成随机密码。我也解释过:

  • 在 PowerShell 中生成不带特殊字符的随机密码
  • 在 PowerShell 中生成带有特殊字符的随机密码

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

取消回复欢迎 发表评论:

关灯