Skip to content

Instantly share code, notes, and snippets.

@gregjhogan
Last active February 6, 2024 13:39
Show Gist options
  • Star 28 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save gregjhogan/2350eb60d02aa759c9d269c3fc6265b1 to your computer and use it in GitHub Desktop.
Save gregjhogan/2350eb60d02aa759c9d269c3fc6265b1 to your computer and use it in GitHub Desktop.
Generate random string in powershell
#lowercase letters/numbers only
-join ((48..57) + (97..122) | Get-Random -Count 32 | % {[char]$_})
# all characters
-join ((33..126) | Get-Random -Count 32 | % {[char]$_})
@tpeiffer
Copy link

Thanks, Greg!

@Mendallas
Copy link

Mendallas commented Sep 27, 2018

Nice to have
But Get-Random will get each item in the list only once. If the value of Count exceeds the number of objects in the collection, Get-Random returns all of the objects in random order, meaning a weaker security for a password.
It would be better to use :
-join ((48..57) * n | Get-Random -Count 32 | % {[char]$_})
n being whatever you want, 10, 100, 1000...

-join ((48..57) | Get-Random -Count 32 | % {[char]$})
2758460139
-join ((48..57) *120 | Get-Random -Count 32 | % {[char]$
})
67297844472509842658108029803065

Copy link

ghost commented Apr 29, 2020

Nice to have
But Get-Random will get each item in the list only once. If the value of Count exceeds the number of objects in the collection, Get-Random returns all of the objects in random order, meaning a weaker security for a password.
It would be better to use :
-join ((48..57) * n | Get-Random -Count 32 | % {[char]$_})
n being whatever you want, 10, 100, 1000...

-join ((48..57) | Get-Random -Count 32 | % {[char]$}) 2758460139 -join ((48..57) *120 | Get-Random -Count 32 | % {[char]$})
67297844472509842658108029803065

another way to get around it is to generate the number of random characters that you want setting the minimum and maximum number within get-random. Its longer, and does the same thing, just a different way.

-join ((1..100) | %{get-random -minimum 33 -maximum 126 | %{[char]$_}})

@One111
Copy link

One111 commented Oct 30, 2020

Thanks a lot!
My string for random alphanumeric string based on solutions above:
-join (((48..57)+(65..90)+(97..122)) * 80 |Get-Random -Count 12 |%{[char]$_})

@owenmurr
Copy link

-join (((48..57)+(65..90)+(97..122)) * 80 |Get-Random -Count 12 |%{[char]$_})

Bam, this is exactly what I am looking for!! Thank you both.

@VaeterchenFrost
Copy link

Keep in mind that the -Maximium is exclusive unlike the array.
so to include 126 do
-join ((1..100) | %{get-random -minimum 33 -maximum 127 | %{[char]$_}})

@ggorlen
Copy link

ggorlen commented Feb 4, 2022

Using ForEach with a nested call to Get-Random on the input ranges is another way to avoid repeats:

-join (1..20 | ForEach {[char]((97..122) + (48..57) | Get-Random)})

@wxwx
Copy link

wxwx commented Mar 1, 2023

if hex digits are good enough you might consider this
-join ((1..8) | % { "{0:X}" -f ( Get-Random -min 0 -max 256 ) })

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment