Get-Random

获取一个随机数,或从集合中随机选择对象。

语法

Get-Random
   [-SetSeed <Int32>]
   [[-Maximum] <Object>]
   [-Minimum <Object>]
   [-Count <Int32>]
   [<CommonParameters>]
Get-Random
   [-SetSeed <Int32>]
   [-InputObject] <Object[]>
   [-Count <Int32>]
   [<CommonParameters>]
Get-Random
   [-SetSeed <Int32>]
   [-InputObject] <Object[]>
   [-Shuffle]
   [<CommonParameters>]

说明

Get-Random cmdlet 获取随机选择的数字。 如果将对象集合提交到 Get-Random,则它将从该集合中获取一个或多个随机选择的对象。

如果没有参数或输入,Get-Random 命令将返回介于 0(零)和 [int32]::MaxValue之间随机选择的 32 位无符号整数。

可以使用 Get-Random 的参数来指定最小值和最大值、从集合返回的对象数或种子编号。

注意

Get-Random 不确保加密安全随机性。 种子值用于当前命令和当前会话中的所有后续 Get-Random 命令,直到再次使用 SetSeed 或关闭会话。 无法将种子重置为其默认值。

故意设置种子会导致非随机的可重复行为。 仅当尝试重现行为(例如调试或分析包含 Get-Random 命令的脚本)时,才应使用它。 请注意,种子值可由同一会话中的其他代码(例如导入的模块)设置。

PowerShell 7.4 包括 Get-SecureRandom,这可确保加密安全随机性。

示例

示例 1:获取随机整数

此命令将获取一个介于 0(零)与 Int32.MaxValue 之间的随机整数。

Get-Random

3951433

示例 2:获取介于 0 和 99 之间的随机整数

Get-Random -Maximum 100

47

示例 3:获取介于 -100 和 99 之间的随机整数

Get-Random -Minimum -100 -Maximum 100

56

示例 4:获取随机浮点数

此命令将获取一个大于或等于 10.7 且小于 20.93 的随机浮点数。

Get-Random -Minimum 10.7 -Maximum 20.93

18.08467273887

示例 5:从数组获取随机整数

此命令将从指定的数组中获取一个随机选择的数字。

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

8

示例 6:从数组中获取多个随机整数

此命令按随机顺序从数组中获取三个随机选择的数字。

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

3
1
13

示例 7:随机化整个集合

从 PowerShell 7.1 开始,可以使用 Shuffle 参数以随机顺序返回整个集合。

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

2
3
5
1
8
13

示例 8:获取随机非数值

此命令将从非数值集合中返回一个随机值。

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

yellow

示例 9:使用 SetSeed 参数

此示例显示了使用 SetSeed 参数的效果。

因为 SetSeed 将产生非随机行为,所以它通常仅用于重现结果,例如调试或分析脚本时。

# Commands with the default seed are pseudorandom
Get-Random -Maximum 100 -SetSeed 23
Get-Random -Maximum 100
Get-Random -Maximum 100
Get-Random -Maximum 100

32
25
93
95

# Commands with the same seed aren't random
Get-Random -Maximum 100 -SetSeed 23
Get-Random -Maximum 100 -SetSeed 23
Get-Random -Maximum 100 -SetSeed 23

32
32
32

# SetSeed results in a repeatable series
Get-Random -Maximum 100 -SetSeed 23
Get-Random -Maximum 100
Get-Random -Maximum 100
Get-Random -Maximum 100

32
25
93
95

示例 10:获取随机文件

这些命令将从本地计算机的 C: 驱动器中获取随机选择的包含 50 个文件的样本。

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

示例 11:滚动骰子

本示例滚动 1200 次骰子,并计算结果。 第一个命令 ForEach-Object 重复调用通过管道传送的数字 (1-6) 到 Get-Random。 结果使用 Group-Object 按其值进行分组格式,并格式化为具有 Select-Object 的表。

1..1200 | ForEach-Object {
    1..6 | Get-Random
} | Group-Object | Select-Object Name,Count

Name Count
---- -----
1      206
2      199
3      196
4      226
5      185
6      188

示例 12:使用 Count 参数

现在可以使用 Count 参数,则无需通过管道传送对象到 Get-Random。 以下示例获取三个小于 10 的随机数。

Get-Random -Count 3 -Maximum 10

9
0
8

示例 13:将 InputObject 参数与空字符串或 $null 配合使用

在此示例中,InputObject 参数指定包含空字符串 ('') 和 $null 的数组。

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

Get-Random 返回 a、空字符串或 $null。 空字符串显示为空白行,$null 返回到 PowerShell 提示。

参数

-Count

指定要返回的随机对象数。 默认值为 1。

与包含集合的 InputObject 一起使用时:

  • 每个随机选择的项仅返回一次。
  • 如果 Count 的值超过集合中的对象数,则集合中的所有对象都按随机顺序返回。
Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

指定对象的集合。 Get-Random 按随机顺序从集合中获取随机选择的对象,最多获取由 Count 指定的数字。 输入对象、一个包含这些对象的变量,或可获取这些对象的命令或表达式。 还可以通过管道将对象集合传递给 Get-Random

从 PowerShell 7 开始, InputObject 参数接受可以包含空字符串或 $null 的数组。 数组可以沿管道向下发送,也可以作为 InputObject 参数值发送。

Type:Object[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Maximum

指定随机数的最大值。 Get-Random 返回一个小于(不等于)最大值的值。 输入整数或双精度浮点数,或可以转换为整数或双精度的对象,如数值字符串(“100”)。

Maximum 值必须大于(不等于)Minimum 值。 如果 MaximumMinimum 值是浮点数,则 Get-Random 将返回随机选择的浮点数。

在 64 位计算机上,如果 Minimum 值是一个 32 位整数,则 Maximum 的默认值为 Int32.MaxValue

如果 Minimum 值是双精度(浮点数),则 Maximum 的默认值为 Double.MaxValue。 否则,默认值为 Int32.MaxValue

Type:Object
Position:0
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Minimum

指定随机数的最小值。 输入整数或双精度浮点数,或可以转换为整数或双精度的对象,如数值字符串(“100”)。 默认值为 0(零)。

Minimum 值必须小于(不等于)Maximum 值。 如果 MaximumMinimum 值是浮点数,则 Get-Random 将返回随机选择的浮点数。

Type:Object
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SetSeed

为随机数生成程序指定种子值。 使用 SetSeed时,cmdlet 将生成非加密安全的伪随机数。

注意

设置种子会导致非随机行为。 仅当尝试重现行为(例如调试或分析包含 Get-Random 命令的脚本)时,才应使用它。

在你再次使用 SetSeed 或关闭该会话之前,此种子值将用于当前命令以及当前会话中的所有后续 Get-Random 命令。 无法将种子重置为其默认值。

Type:Nullable<T>[Int32]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Shuffle

按随机顺序返回整个集合。

Type:SwitchParameter
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

输入

Object

你可以通过管道将任何对象传递给此 cmdlet。 它从通过管道传递的对象中随机选择值。

输出

Int32

Int64

Double

PSObject

此 cmdlet 返回整数或浮点数,或从提交的集合中随机选择的对象。

备注

Get-Random 并不总是返回与输入值相同的数据类型。 下表显示了每个数值输入类型的输出类型。

输入类型 输出类型
SByte 双精度
Byte 双精度
Int16 双精度
UInt16 双精度
Int32 Int32
UInt32 双精度
Int64 Int64
UInt64 双精度
双精度 Double
Single Double

从 Windows PowerShell 3.0 开始,Get-Random 支持 64 位整数。 在 Windows PowerShell 2.0 中,所有值都转换为 System.Int32

从 PowerShell 7 开始, RandomListItemParameterSet 参数集中的 InputObject 参数接受包含空字符串或 $null 的数组。 在早期 PowerShell 版本中,只有 RandomNumberParameterSet 参数集中的 Maximum 参数接受空字符串或 $null