PowerShell을 사용하여 임의 문자열 생성
일반적으로 Active Directory를 관리할 때 대량 사용자를 가져와 임시 암호를 제공하는 작업이 있을 수 있습니다. 그러나 각 사용자에 대해 고유한 암호를 설정해야 하는 경우 임의의 문자열을 생성하는 스크립트를 생성하지 않는 한 이 작업은 지루할 것입니다.
따라서 이 문서에서는 PowerShell을 사용하여 암호에 사용할 수 있는 임의의 문자열을 생성하는 방법에 대해 설명합니다.
Get-Random
으로 임의의 문자열 생성
PowerShell에는 Get-Random
이라는 기본 명령이 있습니다. Get-Random
cmdlet은 무작위로 선택된 문자 또는 숫자를 가져옵니다.
개체 컬렉션을 Get-Random
에 제출하면 그룹에서 무작위로 선택된 개체를 하나 이상 가져옵니다.
암호를 생성할 때 매번 다른 input
매개 변수(특수 문자, 숫자, 대문자 및 소문자)를 사용하여 Get-Random
cmdlet을 네 번 호출하고 결과 문자열을 연결하고 다른 Get -랜덤
호출합니다.
예제 코드:
$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
위의 출력은 매번 다른 문자열을 생성해야 합니다. 그러나 이전 스니펫에서 볼 수 있듯이 cmdlet을 여러 번 사용해야 하므로 스크립트 블록이 길어지고 처리 시간이 밀리초 단위로 느려집니다.
이 기사의 다음 섹션에서는 몇 줄의 코드로 위의 기능을 모두 수행하는 방법에 대해 설명합니다.
GeneratePassword()
기능으로 임의의 암호 생성
암호에 사용되는 문자열만 생성하려는 경우 [System.Web.Security]
에서 GeneratePassword()
를 사용하는 것을 고려할 수 있습니다. 함수를 사용하기 전에 먼저 아래 코드를 사용하여 System.Web
라이브러리를 로드해야 합니다.
[Reflection.Assembly]::LoadWithPartialName("System.Web")
일단 로드되면 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
출력:
Y4UkK4)G+lannRd
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn