11

Get Random Lines From A File (Or Random Files From A Directory... Or Random Item...

 3 years ago
source link: https://thomasrayner.ca/get-random-lines-from-a-file-or-random-files-from-a-directory-or-random-item-from-any-collection/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Get Random Lines From A File (Or Random Files From A Directory... Or Random Item From Any Collection)

Don’t ask me why but I recently had a need to get a random line from a text file. There’s a small piece of strange behavior that I came across with the cmdlet I chose to use: Get-RandomGet-Random does what it sounds like. It’s commonly used for getting random numbers (see this post I wrote a while ago about a gotcha with this behavior) but you can also pass it an input object.

For this example, I have a file in my c:\temp folder named random.txt. It’s contents just look like this.

so
many
random
words
to
choose
from
which
one
will
be
picked?

So since Get-Random includes an -InputObject parameter, I should just be able to do the following, right?

Get-Random -InputObject C:\temp\random.txt

Well, if you were hoping it would be that easy, I’m afraid I’ve got some bad news. Every time you run this command, the InputObject specified is always the value returned.

getrandom1

Well that’s not very helpful for a guy looking for a random line from the file. Turns out that -InputObject is looking for a collection of items, it’s not doing the work of examining the path to the file and extracting the data from it. That’s easy enough to get around. We’ll just do that work ourselves.

Get-Random -InputObject (get-content C:\temp\random.txt)

There we go. Get a random item from the collection returned by Get-Content C:\Temp\Random.txt. Then you get output like this.

You could get a random file from a directory like this.

Get-Random -InputObject (get-childitem c:\temp\)

Or, indeed, pass any array or hash table. Here’s an example of getting a random property from the $Host variable.

$Host | Select-Object (Get-Random -InputObject ($Host | Get-Member -MemberType Property).Name)
Written on June 24, 2015

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK