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?
Odpowiedz
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
Dzięki! Lubię "Hej, Skrypciarze!" połączyć! – vividos
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
@vividos zepsuty link jest już naprawiony (dzięki Google) – Wolf
Set tlib = Server.CreateObject("Scriptlet.TypeLib")
strGuid = tlib.Guid
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)
Najlepsza odpowiedź: łączy dostarczając niezbyt inteligentną funkcję i dodając dodatkowy materiał do informacji o szczegółach. To powinna być zaakceptowana odpowiedź. – Wolf
' Returns a unique Guid on every call. Removes any cruft.
Function CreateGuid()
CreateGuid = Left(CreateObject("Scriptlet.TypeLib").Guid,38)
End Function
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