2009-06-09 13 views
28

Chcę generować ciągi GUID w VBScript. Wiem, że nie ma wbudowanej funkcji w VBScript do jej generowania. Nie chcę używać generowanych losowo identyfikatorów GUID. Może istnieje obiekt ActiveX, który można utworzyć za pomocą metody CreateObject(), która na pewno zostanie zainstalowana w (nowszych) wersjach systemu Windows, które mogą generować identyfikator GUID?Jak wygenerować identyfikator GUID w VBScript?

+0

myślę, że przyjęte rozwiązanie ma znacznie niższą jakość niż [Najwyżej oceniane One] (http://stackoverflow.com/a/968790/2932052). Może powód do przemyślenia swojej decyzji? – Wolf

Odpowiedz

28

How Can I Create a GUID Using a Script? (in: Hey, Scripting Guy! Blog) mówi tak:

Set TypeLib = CreateObject("Scriptlet.TypeLib") 
Wscript.Echo TypeLib.Guid 

jednak pamiętać, że Scriptlet.TypeLib.Guid zwraca ciąg znaków NUL, co może powodować pewne rzeczy do ignore everything after the GUID. Aby to naprawić, może trzeba użyć:

Set TypeLib = CreateObject("Scriptlet.TypeLib") 
myGuid = TypeLib.Guid 
myGuid = Left(myGuid, Len(myGuid)-2) 
Wscript.Echo myGuid 
+0

Dzięki! Lubię "Hej, Skrypciarze!" połączyć! – vividos

+8

Dla każdego, kto używa tej metody, należy pamiętać, że obiekt 'Scriptlet.TypeLib' zwraca taki sam identyfikator GUID za każdym razem, gdy wywoływana jest właściwość' GUID'. Jeśli potrzebujesz wygenerować wiele identyfikatorów GUID, zniszcz i odtwórz obiekt 'Scriptlet.TypeLib' lub, jeszcze lepiej, zawiń go w funkcję pokazaną tak, jak inne, tak aby obiekt był tworzony i niszczony przy każdym wywołaniu funkcji. – Bond

+0

@vividos zepsuty link jest już naprawiony (dzięki Google) – Wolf

2
Set tlib = Server.CreateObject("Scriptlet.TypeLib") 
strGuid = tlib.Guid 
41
Function CreateGUID 
    Dim TypeLib 
    Set TypeLib = CreateObject("Scriptlet.TypeLib") 
    CreateGUID = Mid(TypeLib.Guid, 2, 36) 
End Function 

Ta funkcja powróci zwykły GUID, np 47BC69BD-06A5-4617-B730-B644DBCD40A9.

Jeśli chcesz GUID w formacie rejestru, np {47BC69BD-06A5-4617-B730-B644DBCD40A9}, zmienić ostatni wiersz z funkcji do

CreateGUID = Left(TypeLib.Guid, 38) 
+0

Najlepsza odpowiedź: łączy dostarczając niezbyt inteligentną funkcję i dodając dodatkowy materiał do informacji o szczegółach. To powinna być zaakceptowana odpowiedź. – Wolf

8
' Returns a unique Guid on every call. Removes any cruft. 
Function CreateGuid() 
    CreateGuid = Left(CreateObject("Scriptlet.TypeLib").Guid,38) 
End Function 
Powiązane problemy