如何使用 PowerShell 生成隨機字串
-
使用
Get-Random
指令生成 PowerShell 中的隨機字串 -
使用
GeneratePassword()
函數生成 PowerShell 中的隨機密碼 -
使用
New-Guid
指令生成 PowerShell 中的隨機字串 -
使用
Get-Random
指令搭配字符集生成 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
從字符集(U
、L
、N
、S
)中生成 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()
函數接受兩個參數:
-
第一個參數是一個整數值,表示密碼所需的總字符數。
-
第二個參數是一個整數值,表示密碼中的特殊字符數。
然而,這段代碼並未保證密碼中至少包含一個數字字符。為了確保至少有一個數字字符,您可以使用以下代碼。
示例代碼:
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 任務的正確工具。
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn