Búsqueda de sitios web

Generar cadena aleatoria en PowerShell [6 formas]


Usando la clase [System.Guid]

Para generar una cadena aleatoria en PowerShell:

  • Cree un identificador único global utilizando el método NewGuid().
  • Utilice el método ToString() para transformar el GUID (creado en el paso anterior) al formato String.
  • Utilice el cmdlet Write-Host para imprimir la cadena aleatoria.

Utilice la clase System.Guid:

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

PRODUCCIÓN :

95ffbbf8-f721-4cf2-886d-dcdbfae00665

New-Guid() es un método estático de la clase [System.Guid] que utilizamos para crear un GUID (Identificador único global) aleatorio. Usamos este método si debemos crear una identificación única en un script.

A continuación, encadenamos el método ToString() con New-Guid() para cambiar su tipo a String que almacenamos en el . variable $randomString. Finalmente, utilizamos el cmdlet Write-Host para imprimir el valor de $randomString en la consola de PowerShell.

Usando la clase .NET RNGCryptoServiceProvider

Para generar una cadena aleatoria en PowerShell:

  • Utilice el cmdlet New-Object para crear una matriz de bytes.
  • Utilice el cmdlet New-Object para crear un objeto de la clase .NET RNGCryptoServiceProvider.
  • Utilice el método GetBytes() para llenar la matriz de bytes (creada en el primer paso) con bytes aleatorios.
  • Utilice el método ToBase64String() para transformar la matriz de bytes en una cadena codificada en base64.
  • Utilice el cmdlet Write-Host para enviar la cadena transformada a la consola de PowerShell.

Utilice la clase RNGCryptoServiceProvider:

$randomBytesArray = New-Object byte[] 32
$rngObject = New-Object System.Security.Cryptography.RNGCryptoServiceProvider
$rngObject.GetBytes($randomBytesArray)
$randomString = [System.Convert]::ToBase64String($randomBytesArray)
Write-Host $randomString

PRODUCCIÓN :

6nh6ArzjvQSh6dW7DQ2C/3sTCZiKWpq/THDOTKHwg8E=

Primero, utilizamos el cmdlet New-Object para crear una matriz de tipo byte y almacenamos su referencia en la variable $randomBytesArray. Esta matriz contendrá bytes aleatorios que generaremos más adelante en el código. El cmdlet New-Object pertenece al módulo Microsoft.PowerShell.Utility y se utiliza para crear objetos.

Nuevamente, usamos el cmdlet New-Object para crear una instancia de la clase RNGCryptoServiceProvider y la almacenamos en la variable $rngObject. ¿Por qué creó este objeto? Porque la clase RNGCryptoServiceProvider ayuda a generar bytes aleatorios de forma criptográficamente segura. Usamos el método GetBytes(), que tomó $randomBytesArray como parámetro y lo llenó con bytes aleatorios.

Después de eso, utilizamos el método ToBase64String() de la clase [System.Convert], que tomó $randomBytesArray como parámetro, lo convirtió a la cadena codificada en base64 y almacenado en la variable $randomString. Finalmente, utilizamos el cmdlet Write-Host para imprimir $randomString en la consola de PowerShell.

Usando System.Random con bucle For y ForEach

Para generar una cadena aleatoria de 10 caracteres en PowerShell:

  • Encadene el método ToCharArray() con un valor de cadena para crear una matriz de caracteres.
  • Utilice el cmdlet New-Object para crear una instancia de la clase System.Random.
  • Utilice el bucle for para realizar los mismos trabajos 10 veces.
  • Para cada iteración:

    • Cree un índice aleatorio utilizando el método Next().
    • Recupera el personaje del índice aleatorio creado en el paso anterior.
    • Utilice += para concatenar el carácter actual recuperado del índice aleatorio especificado.
  • Utilice Write-Host para imprimir la cadena aleatoria en la consola de PowerShell.

Uso para bucle:

$charsArray = "abcdefghijkmnopqrstuvwxyzABCEFGHJKLMNPQRSTUVWXYZ0123456789!"#$%&''()*+,-./:;<=>?@[\]^_`{|}~".ToCharArray()
$randomObject = New-Object System.Random
$randomString = ""
for ($i = 0; $i -lt 10; $i++) {
    $randomIndex = $randomObject.Next(0, $charsArray.Length)
    $randomCharacter = $charsArray[$randomIndex]
    $randomString += $randomCharacter
}
Write-Host $randomString

PRODUCCIÓN :

mQ7NgZmX!0

Primero, utilizamos el método ToCharArray() para crear una matriz de caracteres almacenados en la variable $charArray. Después de eso, usamos el cmdlet New-Object para crear una instancia de la clase System.Random y la almacenamos en la variable $randomObject; Creamos una instancia de la clase System.Random para crear índices aleatorios. Lo veremos más adelante en el bucle for.

A continuación, declaramos e inicializamos la variable $randomString con una cadena vacía. Después de eso, usamos el bucle for para hacer 10 iteraciones; para cada iteración, utilizamos el método Next() para crear un índice aleatorio y lo almacenamos en la variable $randomIndex. Tenga en cuenta que el índice aleatorio siempre estará en el rango de 0 a longitud de la matriz.

Usamos este $randomIndex para recuperar un carácter de $charArray y lo guardamos en la variable $randomCharacter. Además, utilizamos el operador de concatenación representado con += para concatenar el $randomCharacter actual con $randomString. Finalmente, imprimimos el valor de la variable $randomString en la consola de PowerShell usando el cmdlet Write-Host.

A continuación se muestra un enfoque alternativo a la solución anterior. Usamos el bucle ForEach para las iteraciones y contiene comparativamente menos líneas de código.

Utilice para cada bucle:

$randomObject = New-Object System.Random
$randomString=""
1..10 | ForEach { $randomString = $randomString + [char]$randomObject.Next(33,126) }
Write-Host $randomString

PRODUCCIÓN :

b?YDha&3>,

Usando el módulo System.Web

Utilice el método GeneratePassword() del módulo System.Web para generar una cadena aleatoria en PowerShell.

Utilice el método GeneratePassword():

[Reflection.Assembly]::LoadWithPartialName("System.Web")
[System.Web.Security.Membership]::GeneratePassword(20,2)

PRODUCCIÓN :

C&h%qk+Cxra7%s9=ZTq@

Para esta solución, tenemos que cargar System.Web en PowerShell usando el método LoadWithPartialName() de la clase Reflection.Assembly. Después de importarlo, utilizamos el método GeneratePassword() de la clase Membership, que reside en el espacio de nombres System.Web.Security.

El método GeneratePassword() tomó dos argumentos; El primero fue la longitud de la contraseña y el segundo, su complejidad. En nuestro caso, obtuvimos la contraseña de longitud 20 caracteres con una complejidad 2 que representa los 2 caracteres no alfanuméricos además de números y letras. Tras la ejecución exitosa del script anterior, obtendremos una cadena de contraseña aleatoria que puede ver arriba.

Uso del cmdlet Get-Random con el operador -join

Utilice el cmdlet Get-Random con el operador -join para generar una cadena aleatoria compuesta de letras minúsculas y números en PowerShell.

Utilice el cmdlet Get-Random con el operador -join:

-join ((48..57) + (97..122) | Get-Random -Count 10 | % {[char]$_})

PRODUCCIÓN :

m8w6dqfn5t

Antes de comprender qué hace el comando anterior, dividámoslo en partes y aprendamos. El (48..57) + (97..122) crea una matriz de valores Unicode que denotan los códigos ASCII de los caracteres entre a-z (97-122) y 0-9 (48-57). Esta matriz se canalizó con el cmdlet Get-Random, que seleccionó valores 10 aleatorios porque especificamos el recuento de 10 usando -Count .

Ahora, los 10 caracteres aleatorios elegidos se pasaron al siguiente proceso % {[char]$_}, que los canalizó al ForEach-Object cmdlet y convirtió cada valor Unicode a su carácter correspondiente. Finalmente, usamos el operador -join para unir todos los caracteres. Entonces, el comando anterior generará y unirá 10 caracteres aleatorios donde cada carácter será una letra minúscula o un número. Alternativamente, podemos usar el siguiente comando para tener letras mayúsculas y caracteres especiales.

Utilice el cmdlet Get-Random con el operador -join para generar una cadena aleatoria que contenga letras minúsculas, mayúsculas, números y caracteres especiales en PowerShell.

Utilice el cmdlet Get-Random con el operador -join:

-join ((33..126) | Get-Random -Count 10 | % {[char]$_})

PRODUCCIÓN :

)H2T\n#,|v

Hasta este punto, generamos una cadena aleatoria; ¿Qué pasa si se supone que debemos crear un número n de cadenas aleatorias en PowerShell?

Uso del bucle for con get-random para crear n cadenas aleatorias

Utilice el bucle for con get-random para generar un número n de cadenas aleatorias en PowerShell.

Utilice for Loop para generar n cadenas aleatorias:

for($i=0; $i -lt 5; $i++){
    ([char[]]([char]'a'..[char]'z' + [char]'A'..[char]'Z') + 0..9 | sort {get-random})[0..9] -join ''
}

PRODUCCIÓN :

M5tV34J81u
2ErYS5uly6
jZ3ufpCBeh
qBdsjZi1Cp
CO2Ez3iDWY

Este ejemplo es similar a los anteriores pero genera 5 cadenas alfanuméricas aleatorias. ¿Cómo? Usamos el bucle for para realizar 5 iteraciones, una iteración por cada cadena aleatoria. En cada iteración, creamos una matriz de caracteres alfanuméricos mediante la concatenación de números, letras minúsculas y letras mayúsculas, que se ordenaron aleatoriamente.

El [0..9] seleccionó los primeros 10 caracteres de la cadena aleatoria y los unió usando el operador -join. Este proceso se repitió para todas las cadenas 5.

Se trata de cómo generar cadenas aleatorias en PowerShell.

Artículos relacionados