Random 同时使用不同的随机数

Random 同时使用不同的随机数,random,vbscript,Random,Vbscript,我有一个VBScript,看起来像这样 Randomize Dim oAPI, oBag Set oAPI = CreateObject("MOM.ScriptAPI") Set oBag = oAPI.CreatePropertyBag() Call oBag.AddValue("Random Performance", Int(Rnd*100)+1) Call oAPI.Return(oBag) 现在,这个脚本的多个实例同时运行,所以它们可能都是同时被播种的。结果,它们每次都给出相同的随机

我有一个VBScript,看起来像这样

Randomize
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Random Performance", Int(Rnd*100)+1)
Call oAPI.Return(oBag)

现在,这个脚本的多个实例同时运行,所以它们可能都是同时被播种的。结果,它们每次都给出相同的随机数。有没有办法让它们同时给出不同的随机值?

我在这方面取得了一些成功,尽管我不知道您是如何运行脚本的,我使用
start/b

' create a number from the Guid
dim g
g = Mid(CreateObject("Scriptlet.TypeLib").Guid, 2, 36)

dim i, c, s
s = 0
for i = 1 to len(g)
    c = Mid(g, i, 1)
    if not IsNumeric(c) then
        c = Asc(c)  
    end if
    s = CInt(c) + s
next

randomize s

for i = 0 to 5 
    WScript.Echo(WScript.Arguments(0) & " " & g & " " & CInt(Rnd*100))
next
这样运行

样本输出

2D1F39B7-6158-4C77-893B-5C749CF5537F 32 1
2D1F39B7-6158-4C77-893B-5C749CF5537F 13 1
2D1F39B7-6158-4C77-893B-5C749CF5537F 49 1
2D1F39B7-6158-4C77-893B-5C749CF5537F 51 1
2D1F39B7-6158-4C77-893B-5C749CF5537F 84 1
2D1F39B7-6158-4C77-893B-5C749CF5537F 59 3
DC29EDBD-9C63-495B-AFB6-A4A18F65C7F8 35 3
DC29EDBD-9C63-495B-AFB6-A4A18F65C7F8 86 3
DC29EDBD-9C63-495B-AFB6-A4A18F65C7F8 80 3
DC29EDBD-9C63-495B-AFB6-A4A18F65C7F8 3
DC29EDBD-9C63-495B-AFB6-A4A18F65C7F8 90 3
DC29EDBD-9C63-495B-AFB6-A4A18F65C7F8 49 4
DC7D2269-436F-4053-B008-F9375BA50F30 34 4
DC7D2269-436F-4053-B008-F9375BA50F30 88 4
DC7D2269-436F-4053-B008-F9375BA50F30 85 4
DC7D2269-436F-4053-B008-F9375BA50F30604
DC7D2269-436F-4053-B008-F9375BA50F30 5 4
DC7D2269-436F-4053-B008-F9375BA50F30 52 2
22F2D6A9-CBF4-48D5-919B-05798FC1BFB1 7 2
22F2D6A9-CBF4-48D5-919B-05798FC1BFB1 89 2
22F2D6A9-CBF4-48D5-919B-05798FC1BFB1 14 2
22F2D6A9-CBF4-48D5-919B-05798FC1BFB1 68 2
22F2D6A9-CBF4-48D5-919B-05798FC1BFB1 89 2
22F2D6A9-CBF4-48D5-919B-05798FC1BFB1 73 5
B13E0D1A-1F93-4387-8CFE-70EEF7FB9B4F 60 5
B13E0D1A-1F93-4387-8CFE-70EEF7FB9B4F 71 5
B13E0D1A-1F93-4387-8CFE-70EEF7FB9B4F 48 5
B13E0D1A-1F93-4387-8CFE-70EEF7FB9B4F 31 5
B13E0D1A-1F93-4387-8CFE-70EEF7FB9B4F 3 5
B13E0D1A-1F93-4387-8CFE-70EEF7FB9B4F 19 5


我会使用进程ID作为种子(用于确定PID,请参见Kul Tigin)


通过在脚本中生成2或3次随机数并添加所有这些随机数,可以降低在多个实例中获得相同随机数的概率。在这种情况下,获得相同随机数的机会将减少。然而,总有一些概率(尽管比当前情况要小)会得到相同的数字。我会尝试让你知道是否有works@Kira不,这似乎不起作用。我得到了和以前一样的结果。只是另一个建议。如果同时在多台计算机上运行此脚本,则可以从本地存储的text/excel文件(可能位于每个工作站的c:\temp文件夹中)读取一些数字数据,并将该值添加到脚本中生成的随机数中。但是,只有当文本文件在不同的机器上有不同的编号时,它才会起作用。你知道这会不会对我的脚本造成很大影响吗?因为这是一个小而简单的脚本,会定期运行,所以我不想让它太重。我已经在问题中发布了整个脚本。没什么了。好吧,您创建并终止了一个额外的进程,因此会对性能产生一些小的影响。如果你担心这个问题,我建议你按照提供的答案去做。
start /b cscript test.vbs //nologo 1
start /b cscript test.vbs //nologo 2
start /b cscript test.vbs //nologo 3
start /b cscript test.vbs //nologo 4
start /b cscript test.vbs //nologo 5
Function GetMyPID
    ppid = 0
    Set sh  = CreateObject("WScript.Shell")
    Set wmi = GetObject("winmgmts://./root/cimv2")

    cmd = "/k " & Mid(CreateObject("Scriptlet.TypeLib").Guid, 2, 36)
    sh.Run "%comspec% " & cmd, 0, False
    WScript.Sleep 100

    qry = "SELECT * FROM Win32_Process WHERE CommandLine LIKE '%" & cmd & "'"
    For Each p In wmi.ExecQuery(qry)
        ppid = p.ParentProcessId
        p.Terminate
        Exit For
    Next

    GetMyPID = ppid
End Function

Randomize GetMyPID
...