使用 PowerShell 解锁随机密码生成

很重要保持密码的长度并且不容易被猜到。你可能知道如何创建一个安全的密码,但是有没有一个小脚本来为你生成呢?幸运的是,如果你使用的是Windows,你可以使用PowerShell构建一个随机密码生成器,可以生成不同长度和复杂度的密码!

与其建立自己的随机密码生成器,不如使用微软已经提供的一个称为GeneratePassword()的.NET方法。这个方法隶属于System.Web.Security.Membership类,可以满足你的所有需求。

构建脚本

要构建这个简单的脚本,首先需要让System.Web程序集可用。System.Web.Security.Membership类是这个程序集的一部分,不是默认可用的。

Add-Type -AssemblyName 'System.Web'

一旦System.Web程序集可用,现在可以调用GeneratePassword()方法了。

GeneratePassword()方法有两个参数:lengthnumberOfNonAlphanumericCharacters。使用这两个参数可以使用PowerShell创建各种随机密码。

  • Length – 这是密码的字符长度。
  • numberOfNonAlphanumericCharacters – 这是方法将生成的非字母数字字符的数量。考虑字符如@,%,&等。

首先,定义您希望拥有的密码长度。下面的示例设置了一个变量为10,您将传递给该方法。

$length = 10

接下来,定义您想在密码中包含的非字母数字字符的数量。下面的代码片段设置了一个变量为5,您将提供给该方法以确保密码中有五个非字母字符。

$nonAlphaChars = 5

接下来是当您调用 GeneratePassword() 方法时,传入上述定义的两个变量的值。

[System.Web.Security.Membership]::GeneratePassword($length, $nonAlphaChars)

当您执行上述代码片段时,PowerShell 将返回一个随机的字符组合字符串,您随后可以在任何您想要的地方使用。

构建随机密码长度

您甚至可以更加随机,使密码长度也随机化。使用 Get-Random 命令来生成一个随机整数,然后将其用作 length 参数,以生成随机长度的密码!

$minLength = 5 ## 字符
$maxLength = 10 ## 字符
$length = Get-Random -Minimum $minLength -Maximum $maxLength
$nonAlphaChars = 5
$password = [System.Web.Security.Membership]::GeneratePassword($length, $nonAlphaChars)

如果您将在 PowerShell 中使用此密码,许多组件都需要一个安全字符串。一旦您将密码作为明文字符串拥有,您可以使用 ConvertTo-SecureString 命令来将其转换为安全字符串。

$secPw = ConvertTo-SecureString -String $password -AsPlainText -Force

构建一个 PowerShell 函数

最后,通过创建一个函数将这个随机密码生成器提升到下一个级别,您可以在任何地方使用它,而无需记住上述所有解释的语法。

function New-RandomPassword {
    param(
        [Parameter()]
        [int]$MinimumPasswordLength = 5,
        [Parameter()]
        [int]$MaximumPasswordLength = 10,
        [Parameter()]
        [int]$NumberOfAlphaNumericCharacters = 5,
        [Parameter()]
        [switch]$ConvertToSecureString
    )
    
    Add-Type -AssemblyName 'System.Web'
    $length = Get-Random -Minimum $MinimumPasswordLength -Maximum $MaximumPasswordLength
    $password = [System.Web.Security.Membership]::GeneratePassword($length,$NumberOfAlphaNumericCharacters)
    if ($ConvertToSecureString.IsPresent) {
        ConvertTo-SecureString -String $password -AsPlainText -Force
    } else {
        $password
    }
}

一旦您将此功能添加到您的个人资料中,一个PowerShell模块或者只是将其复制/粘贴到您当前的会话中,您就可以轻松地执行它。

New-RandomPassword -MinimumPasswordLength 10 -MaximumPasswordLength 15 -NumberOfAlphaNumericCharacters 6 -ConvertToSecureString

Source:
https://adamtheautomator.com/random-password-generator/