2
Powershell Get-Random
cmdlet的文档表明该种子是系统滴答计数,但如果执行以下测试,则$rand1
的值不会被复制到输出中for()
循环等似乎独立于TickCount
。这是为什么?什么是Powershell Get-Random cmdlet的默认种子
# 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
}
2件事情:在将当前滴答计数分配给$ tick1和解析+执行Get-Random之间的时间内,'TickCount'值无疑增加了。此外,帮助文件说*它使用*系统时钟来计算种子,而不是种子*是系统时钟的值,必然 –
关于第一点:这就是为什么我收集之前和之后的滴答计数($ tick1和$ tick2),然后遍历生成$ rand1时Get-Random可用的所有可能值,所以我认为这是可以解释的吗? 奇怪的是,Get-Random仅仅是.net Random函数的一个包装。我已经测试过这个功能,它确实按预期工作 - 它确实使用了滴答计数。 – user5690322
你是对的 - 在PowerShell cmdlet中必须做些额外的事情,但在使用powershell反射器检查它时,我无法看到它除了调用和传递.net生成器之外什么都做。这有点模糊。 – user5690322