2009-06-09 8 views
28

Quiero generar cadenas GUID en VBScript. Sé que no hay una función incorporada en VBScript para generar uno. No quiero usar GUID aleatorios. Tal vez hay un objeto ActiveX que se puede crear usando CreateObject() que seguramente se instalará en versiones (más recientes) de Windows que pueden generar un GUID?¿Cómo generar un GUID en VBScript?

+0

creo que la respuesta aceptada tiene mucho menor calidad que el [más votos uno] (http://stackoverflow.com/a/968790/2932052). Tal vez una razón para reconsiderar su decisión? – Wolf

Respuesta

28

How Can I Create a GUID Using a Script? (in: Hey, Scripting Guy! Blog) dice esto:

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

Sin embargo, tenga en cuenta que Scriptlet.TypeLib.Guid devuelve una cadena terminada en cero, lo que puede causar que algunas cosas que ignore everything after the GUID. Para corregir esto, puede que tenga que utilizar:

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

Gracias! Me gusta el "¡Hola, chico de scripting!" ¡enlazar! – vividos

+8

Para cualquiera que use este método, tenga en cuenta que el objeto 'Scriptlet.TypeLib' devolverá _el mismo GUID_ cada vez que invoque la propiedad' GUID'. Si necesita generar múltiples GUID, destruya y vuelva a crear el objeto 'Scriptlet.TypeLib' o, mejor aún, envuélvalo en una función como otras han mostrado para que el objeto sea creado y destruido con cada llamada a la función. – Bond

+0

@vividos El enlace roto está arreglado ahora (gracias a 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 

Esta función devolverá un GUID llano, por ejemplo, 47BC69BD-06A5-4617-B730-B644DBCD40A9.

Si quieres un GUID en un formato de registro, por ejemplo, {47BC69BD-06A5-4617-B730-B644DBCD40A9}, cambie la última línea de la función de

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

Mejor respuesta: combina proporcionando una función no demasiado inteligente y agregando material adicional para obtener información sobre los detalles. Esta debería ser la respuesta aceptada. – Wolf

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