Edit

Share via


Get-SecureRandom

Gets a random number, or selects objects randomly from a collection.

Syntax

RandomNumberParameterSet (Default)

Get-SecureRandom
    [[-Maximum] <Object>]
    [-Minimum <Object>]
    [-Count <Int32>]
    [<CommonParameters>]

RandomListItemParameterSet

Get-SecureRandom
    [-InputObject] <Object[]>
    [-Count <Int32>]
    [<CommonParameters>]

ShuffleParameterSet

Get-SecureRandom
    [-InputObject] <Object[]>
    [-Shuffle]
    [<CommonParameters>]

Description

The Get-SecureRandom cmdlet gets a randomly selected number. If you submit a collection of objects to Get-SecureRandom, it gets one or more randomly selected objects from the collection.

Without parameters or input, a Get-SecureRandom command returns a randomly selected 32-bit unsigned integer between 0 (zero) and [int32]::MaxValue.

You can use the parameters of Get-SecureRandom to specify the minimum and maximum values and the number of objects returned from a collection.

Get-SecureRandom generates cryptographically secure randomness using the RandomNumberGenerator class.

Examples

Example 1: Get a random integer

This command gets a random integer between 0 (zero) and Int32.MaxValue.

Get-SecureRandom
3951433

Example 2: Get a random integer between 0 and 99

Get-SecureRandom -Maximum 100
47

Example 3: Get a random integer between -100 and 99

Get-SecureRandom -Minimum -100 -Maximum 100
56

Example 4: Get a random floating-point number

This command gets a random floating-point number greater than or equal to 10.7 and less than 20.93.

Get-SecureRandom -Minimum 10.7 -Maximum 20.93
18.08467273887

Example 5: Get a random integer from an array

This command gets a randomly selected number from the specified array.

1, 2, 3, 5, 8, 13 | Get-SecureRandom
8

Example 6: Get several random integers from an array

This command gets three randomly selected numbers in random order from an array.

1, 2, 3, 5, 8, 13 | Get-SecureRandom -Count 3
3
1
13

Example 7: Randomize an entire collection

You can use the Shuffle parameter to return the entire collection in a random order.

1, 2, 3, 5, 8, 13 | Get-SecureRandom -Shuffle
2
3
5
1
8
13

Example 8: Get a random non-numeric value

This command returns a random value from a non-numeric collection.

"red", "yellow", "blue" | Get-SecureRandom
yellow

Example 9: Get random files

These commands get a randomly selected sample of 50 files from the C: drive of the local computer.

$Files = Get-ChildItem -Path C:\* -Recurse
$Sample = $Files | Get-SecureRandom -Count 50

Example 10: Roll fair dice

This example rolls a fair die 1200 times and counts the outcomes. The first command, ForEach-Object repeats the call to Get-SecureRandom from the piped in numbers (1-6). The results are grouped by their value with Group-Object and formatted as a table with Select-Object.

1..1200 | ForEach-Object {
    1..6 | Get-SecureRandom
} | Group-Object | Select-Object Name,Count
Name Count
---- -----
1      206
2      199
3      196
4      226
5      185
6      188

Example 11: Use the Count parameter

You can use the Count parameter without piping objects to Get-SecureRandom. The following example gets three random numbers less than 10.

Get-SecureRandom -Count 3 -Maximum 10
9
0
8

Example 12: Use the InputObject parameter with an empty string or $null

In this example, the InputObject parameter specifies an array that contains an empty string ('') and $null.

Get-SecureRandom -InputObject @('a','',$null)

Get-SecureRandom returns either a, empty string, or $null. The empty string displays as a blank line and $null returns to a PowerShell prompt.

Parameters

-Count

Specifies the number of random objects to return. The default is 1.

When used with InputObject containing a collection:

  • Each randomly selected item is returned only once.
  • If the value of Count exceeds the number of objects in the collection, all objects in the collection are returned in random order.

Parameter properties

Type:Int32
Default value:None
Supports wildcards:False
DontShow:False

Parameter sets

RandomNumberParameterSet
Position:Named
Mandatory:False
Value from pipeline:False
Value from pipeline by property name:False
Value from remaining arguments:False
RandomListItemParameterSet
Position:Named
Mandatory:False
Value from pipeline:False
Value from pipeline by property name:False
Value from remaining arguments:False

-InputObject

Specifies a collection of objects. Get-SecureRandom gets randomly selected objects in random order from the collection up to the number specified by Count. Enter the objects, a variable that contains the objects, or a command or expression that gets the objects. You can also pipe a collection of objects to Get-SecureRandom.

The InputObject parameter accepts arrays that can contain an empty string or $null. The array can be sent down the pipeline or as an InputObject parameter value.

Parameter properties

Type:

Object[]

Default value:None
Supports wildcards:False
DontShow:False

Parameter sets

RandomListItemParameterSet
Position:0
Mandatory:True
Value from pipeline:True
Value from pipeline by property name:False
Value from remaining arguments:False
ShuffleParameterSet
Position:0
Mandatory:True
Value from pipeline:True
Value from pipeline by property name:False
Value from remaining arguments:False

-Maximum

Specifies a maximum value for the random number. Get-SecureRandom returns a value that's less than the maximum (not equal). Enter an integer, a double-precision floating-point number, or an object that can be converted to an integer or double, such as a numeric string ("100").

The value of Maximum must be greater than (not equal to) the value of Minimum. If the value of Maximum or Minimum is a floating-point number, Get-SecureRandom returns a randomly selected floating-point number.

On a 64-bit computer, if the value of Minimum is a 32-bit integer, the default value of Maximum is Int32.MaxValue.

If the value of Minimum is a double (a floating-point number), the default value of Maximum is Double.MaxValue. Otherwise, the default value is Int32.MaxValue.

Parameter properties

Type:Object
Default value:None
Supports wildcards:False
DontShow:False

Parameter sets

RandomNumberParameterSet
Position:0
Mandatory:False
Value from pipeline:False
Value from pipeline by property name:False
Value from remaining arguments:False

-Minimum

Specifies a minimum value for the random number. Enter an integer, a double-precision floating-point number, or an object that can be converted to an integer or double, such as a numeric string ("100"). The default value is 0 (zero).

The value of Minimum must be less than (not equal to) the value of Maximum. If the value of Maximum or Minimum is a floating-point number, Get-SecureRandom returns a randomly selected floating-point number.

Parameter properties

Type:Object
Default value:None
Supports wildcards:False
DontShow:False

Parameter sets

RandomNumberParameterSet
Position:Named
Mandatory:False
Value from pipeline:False
Value from pipeline by property name:False
Value from remaining arguments:False

-Shuffle

Returns the entire collection in a randomized order.

Parameter properties

Type:SwitchParameter
Default value:None
Supports wildcards:False
DontShow:False

Parameter sets

ShuffleParameterSet
Position:Named
Mandatory:True
Value from pipeline:False
Value from pipeline by property name:False
Value from remaining arguments:False

CommonParameters

This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction, and -WarningVariable. For more information, see about_CommonParameters.

Inputs

Object

You can pipe any object to this cmdlet. It selects values randomly from the piped objects.

Outputs

Int32

Int64

Double

PSObject

This cmdlet returns an integer or floating-point number, or an object selected randomly from a submitted collection.

Notes

Get-SecureRandom doesn't always return the same data type as the input value. The following table shows the output type for each of the numeric input types.

Input Type Output Type
SByte Double
Byte Double
Int16 Double
UInt16 Double
Int32 Int32
UInt32 Double
Int64 Int64
UInt64 Double
Double Double
Single Double