如何使用 PowerShell 生成隨機字串

  1. 使用 Get-Random 指令生成 PowerShell 中的隨機字串
  2. 使用 GeneratePassword() 函數生成 PowerShell 中的隨機密碼
  3. 使用 New-Guid 指令生成 PowerShell 中的隨機字串
  4. 使用 Get-Random 指令搭配字符集生成 PowerShell 中的隨機字串
  5. 結論
如何使用 PowerShell 生成隨機字串

管理 Active Directory 時,導入擁有唯一臨時密碼的大批用戶可能會面臨挑戰。幸運的是,PowerShell 提供了有效的解決方案來生成隨機字串,以簡化這些任務。

在本文中,我們將探討如何使用 PowerShell 中的不同方法來達成這個目標。

使用 Get-Random 指令生成 PowerShell 中的隨機字串

PowerShell 提供了一個名為 Get-Random 的本地命令,它可以隨機選擇字符或數字。當我們為 Get-Random 命令提供一個項目數組時,它會隨機從該集合中挑選一個或多個對象。

在創建密碼時,我們可以用不同的 input 參數(特殊字符、數字、大寫字母和小寫字母)四次調用 Get-Random 指令,將結果字符串連接在一起,然後使用另一個 Get-Random 呼叫對其進行洗牌。

在下面的示例中,我們定義了一個名為 $TokenSet 的哈希表來存儲大寫字符(U)、小寫字符(L)、數字(N)和特殊字符(S)的字符集。這行代碼 $variablename = Get-Random -Count 5 -InputObject $TokenSet.U 從字符集(ULNS)中生成 5 個字符的隨機選擇並將其存儲在變量($Upper$Lower$Number$Special)中。

然後,我們將每組中隨機選擇的字符組合成一個名為 $StringSet 的單一字符集。最後,我們通過從 $StringSet 中選取生成一個 15 個字符的隨機字串,然後將它們連接在一起形成最終的密碼。

示例代碼:

$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 ''

輸出:

9ZimEXDW*@xo?12

上述代碼每次生成不同的字符串。然而,它涉及多次調用 Get-Random 指令,這樣會使腳本變得更長且在處理時間上變得較慢。

下一節將討論如何僅用幾行代碼實現相同的功能。

使用 GeneratePassword() 函數生成 PowerShell 中的隨機密碼

如果您需要創建針對密碼的特定字符串,可以使用來自 [System.Web.Security] 命名空間的 GeneratePassword() 函數。要使用此功能,必須首先加載 System.Web 庫。

[Reflection.Assembly]::LoadWithPartialName("System.Web")

加載後,我們可以運行 GeneratePassword() 函數來隨機生成密碼。

在下面的代碼中,我們使用 [System.Web.Security.Membership] 命名空間來訪問 GeneratePassword() 函數。

示例代碼:

[System.Web.Security.Membership]::GeneratePassword(15, 2)

輸出:

QQjj*LJ:e=YZ)Fo

從上述示例代碼中可以看到,GeneratePassword() 函數接受兩個參數:

  1. 第一個參數是一個整數值,表示密碼所需的總字符數。

  2. 第二個參數是一個整數值,表示密碼中的特殊字符數。

然而,這段代碼並未保證密碼中至少包含一個數字字符。為了確保至少有一個數字字符,您可以使用以下代碼。

示例代碼:

do {
    $pwd = [System.Web.Security.Membership]::GeneratePassword(15, 2)
} until ($pwd -match '\d')

$pwd

首先,使用 do 關鍵字創建一個循環來生成密碼並確保它至少包含一個數字字符。然後,使用這行代碼 [System.Web.Security.Membership]::GeneratePassword(15, 2) 生成一個包含 2 個特殊字符的 15 個字符的隨機密碼,並將其存儲在 $pwd 變量中。

該循環將重複,直到生成的密碼中至少包含一個數字字符。

輸出:

Y4UkK4)G+lannRd

僅用幾行代碼,以上輸出每次生成不同的字符串,並確保生成的字符串中至少有一個數字字符。

使用 New-Guid 指令生成 PowerShell 中的隨機字串

PowerShell 提供了 New-Guid 指令來生成隨機 GUID(全局唯一標識符)。您可以將這些 GUID 用作隨機字串,用於各種用途,包括密碼。

在以下示例中,我們使用 [System.Guid]::NewGuid() 生成一個隨機 GUID(全局唯一標識符),然後將生成的 GUID 轉換為字符串表示並存儲在 $randomString 變量中。

示例代碼:

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

$randomString

輸出:

de5881dc-a546-43da-9b89-0bae712406b1

輸出將生成一個隨機字符串。

使用 Get-Random 指令搭配字符集生成 PowerShell 中的隨機字串

您還可以通過定義自定義字符集並使用 Get-Random 指令生成隨機字符串。這種方法使您更好地控制用於隨機字符串的字符集。

這裡有一個示例。

示例代碼:

$length = 10

$characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.ToCharArray()
$randomString = -join ($characters | Get-Random -Count $length)

$randomString

首先,我們定義隨機字符串的期望長度並將其存儲在變量 $length 中。

然後,我們定義隨機字符串將從中生成的字符($characters)作為字符數組。.ToCharArray() 方法將字符串轉換為其各個字符的數組。

接下來,我們通過隨機選擇字符數組中的字符來創建一個指定長度的字符串 ($randomString),所選的字符連接在一起形成最終的隨機字符串。最後,我們打印生成的隨機字符串。

輸出:

9lQSruF40i

輸出將通過從 $characters 中選擇字符來生成隨機字符串。

結論

本文為您提供了一系列在 PowerShell 中生成隨機字符串的方法,確保您擁有管理獨特密碼和其他 Active Directory 任務的正確工具。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

相關文章 - PowerShell String