2017-07-26 6 views
4

私は今、この異なる乱数

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、まったく同じ時刻に実行このスクリプトの複数のインスタンスを持っているので、彼らはおそらく、すべてが同時に播種されています。結果として、それらはすべて一度に同じ乱数を与えます。同時に異なる乱数値を与える方法がありますか?

+0

あなたはスクリプトで乱数2または3回を生成することによって、複数のインスタンス間で同じ乱数を取得する確率を低減し、これらすべての乱数を追加することができます。このような場合、同じ乱数を得る機会は少なくなります。しかし、同じ数を得る確率は常に(現在のシナリオよりは小さいが)あるだろう。 – Gurman

+0

動作しているかどうか試してみます – naman1901

+0

@Kiraいいえ、これは動作していません。私は以前と同じ結果を得ています。 – naman1901

答えて

4

私はあなたが私はこれ

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 

それを実行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 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-F9375BA50F30 60 4
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-4 387-8CFE-70EEF7FB9B4F 19 5

2

私はプロセスIDをRandomizeのシードとして使用します。 Kul-Tiginのthis answer)。

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 
... 
+0

これは少し重く見えます。定期的に実行される小さな単純なスクリプトなので、これは私のスクリプトに多大な影響を与えるかどうかを知っていますか? – naman1901

+0

質問にスクリプト全体を掲載しました。それ以上のことはありません。 – naman1901

+0

さて、追加のプロセスを作成して終了するので、パフォーマンスに多少の影響があります。あなたがそれについて心配しているなら、私はあなたが回答[オラクル認定プロフェッショナル](https://stackoverflow.com/a/45323168/1630171)と一緒に行くことを提案します。 –

関連する問題