Cómo generar cadenas aleatorias usando PowerShell

  1. Utilice el cmdlet Get-Random para generar cadenas aleatorias en PowerShell
  2. Utilice la función GeneratePassword() para generar contraseñas aleatorias en PowerShell
  3. Utilice el cmdlet New-Guid para generar cadenas aleatorias en PowerShell
  4. Utilice el cmdlet Get-Random con conjuntos de caracteres para generar cadenas aleatorias en PowerShell
  5. Conclusión
Cómo generar cadenas aleatorias usando PowerShell

Al gestionar Active Directory, tareas como importar usuarios en masa con contraseñas temporales únicas pueden ser desafiantes. Afortunadamente, PowerShell ofrece soluciones efectivas para generar cadenas aleatorias que simplifican estas tareas.

En este artículo, exploraremos cómo lograr esto utilizando diferentes métodos en PowerShell.

Utilice el cmdlet Get-Random para generar cadenas aleatorias en PowerShell

PowerShell proporciona un comando nativo llamado Get-Random, que selecciona caracteres o números aleatorios. Cuando proporcionamos un arreglo de elementos al comando Get-Random, selecciona aleatoriamente uno o más objetos de esa colección.

Al crear contraseñas, podemos invocar el cmdlet Get-Random cuatro veces con diferentes parámetros de input (caracteres especiales, números, mayúsculas y minúsculas), concatenar las cadenas resultantes y mezclarlas usando otra invocación de Get-Random.

En el ejemplo a continuación, definimos una tabla hash llamada $TokenSet para almacenar conjuntos de caracteres para mayúsculas(U), minúsculas(L), números(N) y caracteres especiales(S). Esta línea de código $variablename = Get-Random -Count 5 -InputObject $TokenSet.U genera una selección aleatoria de 5 caracteres de los conjuntos de caracteres(U, L, N, S) y la almacena en una variable($Upper, $Lower, $Number, $Special).

Luego, combinamos los caracteres seleccionados aleatoriamente de cada conjunto en un único conjunto de caracteres llamado $StringSet. Por último, generamos una cadena aleatoria de 15 caracteres seleccionando de $StringSet, y luego los unimos para formar la contraseña final.

Código de ejemplo:

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

Salida:

9ZimEXDW*@xo?12

El código anterior genera una cadena diferente cada vez. Sin embargo, implica múltiples llamadas al cmdlet Get-Random, lo que puede hacer que el script sea más largo y más lento en términos de tiempo de procesamiento.

La siguiente sección discute cómo lograr la misma funcionalidad en solo unas pocas líneas de código.

Utilice la función GeneratePassword() para generar contraseñas aleatorias en PowerShell

Si necesita crear cadenas específicas de contraseñas, puede usar la función GeneratePassword() del espacio de nombres [System.Web.Security]. Para usar esta función, primero debe cargar la biblioteca System.Web.

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

Una vez cargada, podemos ejecutar la función GeneratePassword() para generar una contraseña aleatoriamente.

En el código a continuación, usamos el espacio de nombres [System.Web.Security.Membership] para acceder a la función GeneratePassword().

Código de ejemplo:

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

Salida:

QQjj*LJ:e=YZ)Fo

Como podemos ver en el código de ejemplo anterior, la función GeneratePassword() acepta dos argumentos:

  1. El primer argumento toma un valor entero que representa el número total de caracteres necesarios para la contraseña.

  2. El segundo argumento toma un valor entero que representa el número de caracteres especiales para la contraseña.

Sin embargo, este código no garantiza la presencia de al menos un carácter numérico en la contraseña. Para asegurarse de que haya al menos un carácter numérico, puede usar el siguiente código.

Código de ejemplo:

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

$pwd

Primero, cree un bucle usando la palabra clave do para generar una contraseña y asegurarse de que contenga al menos un carácter numérico. Luego, genere una contraseña aleatoria con 15 caracteres, incluyendo 2 caracteres especiales, usando esta línea de código [System.Web.Security.Membership]::GeneratePassword(15, 2) y almacénela en la variable $pwd.

El bucle se repite hasta que la contraseña generada contenga al menos un carácter numérico.

Salida:

Y4UkK4)G+lannRd

En solo unas pocas líneas de código, la salida anterior genera una cadena diferente cada vez y asegura que haya al menos un carácter numérico en la cadena generada.

Utilice el cmdlet New-Guid para generar cadenas aleatorias en PowerShell

PowerShell proporciona el cmdlet New-Guid para generar GUIDs aleatorios (Identificadores Únicos Globales). Puede utilizar estos GUIDs como cadenas aleatorias para diversos propósitos, incluidas las contraseñas.

En el siguiente ejemplo, generamos un GUID aleatorio (Identificador Único Global) utilizando [System.Guid]::NewGuid(), luego convertimos el GUID generado a una representación de cadena y lo almacenamos en la variable $randomString.

Código de ejemplo:

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

$randomString

Salida:

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

La salida generará una cadena aleatoria.

Utilice el cmdlet Get-Random con conjuntos de caracteres para generar cadenas aleatorias en PowerShell

También puede generar cadenas aleatorias definiendo conjuntos de caracteres personalizados y utilizando el cmdlet Get-Random. Este método permite un mayor control sobre el conjunto de caracteres utilizado para las cadenas aleatorias.

Aquí hay un ejemplo.

Código de ejemplo:

$length = 10

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

$randomString

Primero, definimos la longitud deseada de la cadena aleatoria y la almacenamos en una variable $length.

Luego, definimos los caracteres($characters) de los cuales se generará la cadena aleatoria como un arreglo de caracteres. El método .ToCharArray() convierte la cadena en un arreglo de sus caracteres individuales.

A continuación, creamos una cadena ($randomString) de la longitud especificada eligiendo aleatoriamente caracteres del arreglo de caracteres, y los caracteres seleccionados se unen para formar la cadena aleatoria final. Por último, imprimimos la cadena aleatoria generada.

Salida:

9lQSruF40i

La salida generará una cadena aleatoria eligiendo los caracteres en $characters.

Conclusión

Este artículo le proporciona una variedad de métodos para generar cadenas aleatorias en PowerShell, asegurando que tenga la herramienta adecuada para gestionar contraseñas únicas y otras tareas en Active Directory.

¿Disfrutas de nuestros tutoriales? Suscríbete a DelftStack en YouTube para apoyarnos en la creación de más guías en vídeo de alta calidad. Suscríbete
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

Artículo relacionado - PowerShell String