Powershell 的文档 Get-Random
cmdlet 建议种子是系统滴答计数,但是,如果执行以下测试,$rand1
的值未在 for()
的输出中复制循环等似乎独立于 TickCount
.为什么会这样?
# generate a random int32 - should automatically use the tickcount as seed?
$tick1 = ([Environment]::TickCount)
$rand1 = Get-Random
Write-Host $rand1
$tick2 = ([Environment]::TickCount)
# generate seeded randoms with all possible values used to generate $rand1
for ($i = $tick1; $i -le $tick2; $i++) {
$rand2 = Get-Random -SetSeed $i
Write-Host $rand2
}
最佳答案
Get-Random
不一定在您使用它时直接播种(当然不是每次使用它时),它可以在进程启动时,也可以在您第一次在 session 中使用时。通常,PRNG 不应多次播种。
此外,正如 Mathias 在评论中指出的那样,它不一定使用 Environment.TickCount
的值。直接地。您可以使用 ILSpy 查看相关程序集的来源,以了解它是如何完成的。我不会为你做这件事,因为我是开源 PowerShell 实现的贡献者。
关于powershell - Powershell Get-Random cmdlet 的默认种子是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34331541/