使用PowerShell解鎖隨機密碼生成

保持密码长度较长且不易被猜测是很重要的。你可能知道如何创建一个安全的密码,但是如果有一个小脚本可以为你做这件事会不会很好呢?幸运的是,如果你使用Windows系统,你可以使用PowerShell构建一个随机密码生成器,该生成器可以生成不同长度和复杂度的密码!

而不是构建你自己的随机密码生成器,你可以使用微软已经提供的现有方法,称为GeneratePassword() .NET方法。这个方法是System.Web.Security.Membership类提供的,并且可以满足你的所有需求。

构建脚本

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

Add-Type -AssemblyName 'System.Web'

一旦System.Web程序集可用,你就可以调用GeneratePassword()方法。

GeneratePassword()方法有两个参数:length和numberOfNonAlphanumericCharacters。使用这两个参数可以使用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/