PowerShell을 사용하여 임의 문자열 생성

Marion Paul Kenneth Mendoza 2023년6월20일
  1. Get-Random으로 임의의 문자열 생성
  2. GeneratePassword() 기능으로 임의의 암호 생성
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() 함수는 두 개의 인수를 허용합니다.

  1. 첫 번째 인수는 암호에 필요한 총 문자 수를 나타내는 정수 값을 사용합니다.
  2. 두 번째 인수는 암호의 특수 문자 수를 나타내는 정수 값을 사용합니다.

그러나 이 코드는 생성된 암호에 적어도 하나의 숫자가 포함된다는 것을 보장하지 않습니다. 적어도 숫자가 포함되어 있는지 확인하려면 아래 스니펫을 실행하십시오.

예제 코드:

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

$pwd

출력:

Y4UkK4)G+lannRd
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