none
Crear accesos directos en el escritorio RRS feed

  • Pregunta

  • Saludos a todos.

    Estoy buscando la manera de que a ciertos usuarios se les cree un acceso directo en el escritorio. Tengo AD en un W2003 server. Los clientes serán tanto XP como W7 o incluso un 2003 al que se conectarán via Terminal Server.

    He encontrado este script, pero me da el error "se requiere un objeto objDesktop" en la linea 4 (Set objDesktopItem = objDesktop.Self )

    -----------------------------------

    'esto te obtiene un objeto haciendo referencia al escritorio en el perfil del usuario 
    Set objShellApp = CreateObject("Shell.Application") 
    Set objDesktop = objShellApp.Namespace(DESKTOP) 
    Set objDesktopItem = objDesktop.Self 

    'esto llama a la función para crear el Shorcut 
    CreateShortCut objDesktopItem.path & "NAME.lnk", "RUTAyEJECUTABLE.EXE", "", "DESCRIPCION", "DIRECTORIO DE EJECUCION" 

    function CreateShortCut(strSCName, strSCTarget, strSCIcon, strSCDesc, strSCWorking) 
    'Funcion para crear Shorcut 
    'strSCName es el nombre del shorcut 
    'strSCTarget es el ejecutable o archivo que queres shortcutear 
    'strSCIcon es el path del archivo.ico o el ejecutable (si hay multiples iconos podes poner ,y el index number empezando por 0) 
    'si no pones nada toma el icono por default 
    'strSCDesc es la descripción 
    'strSCWorking es el directorio de trabajo 

    Set objShell = CreateObject("WScript.Shell") 
    Set objShortCut = objShell.CreateShortcut(strSCName) 
    objShortCut.TargetPath = strSCTarget 
    if strSCIcon <> "" then objShortCut.IconLocation = strSCIcon 
    objShortCut.Description = strSCDesc 
    objShortCut.WorkingDirectory = strSCWorking 
    objShortCut.Save 
    End Function 

    ------------------------------------

    La idea es ejecutar este script por directiva en la OU donde tenga a los usuarios. No me sirve usar la ruta de all users ni un script personalizado porque habrá muchos usuarios y que cambien continuamente.

    Muchas gracias por la ayuda

    jueves, 19 de abril de 2012 9:14

Respuestas

  • Tienes dos fallos:

    1. Cuando creas un objeto Folder con el método Namespace del objeto Shell, especificas la carpeta del escritorio, pero no has definido antes la constante que la identifica.
    2. Cuando montas la ruta y nombre del acceso directo no precedes al nombre de un slash inverso, con lo que se creará el acceso directo en la raíz del perfil del usuario y tendrá por nombbre  el de la carpeta del escritorio seguido de NAME (si es un XP español será el acceso directo c:\Documents and settings\usuario\EscritorioNAME.lnk), porque la propiedad Path de un objeto Folder te devuelve la ruta de la carpeta sin el slash inverso final.

    Así pues, para que te funcione, debes modificar tu script a esto:

    'Constante del escritorio del usuario que ejecuta el script
    Const DESKTOP = 0
    
    'esto te obtiene un objeto haciendo referencia al escritorio en el perfil del usuario 
    Set objShellApp = CreateObject("Shell.Application") 
    Set objDesktop = objShellApp.Namespace(DESKTOP) 
    Set objDesktopItem = objDesktop.Self 
    
    'esto llama a la función para crear el Shorcut 
    CreateShortCut objDesktopItem.path & "\NAME.lnk", _
                   "RUTAyEJECUTABLE.EXE", "", "DESCRIPCION", _
                   "DIRECTORIO DE EJECUCION" 
    
    function CreateShortCut(strSCName, strSCTarget, strSCIcon, strSCDesc, strSCWorking) 
    'Funcion para crear Shorcut 
    'strSCName es el nombre del shorcut 
    'strSCTarget es el ejecutable o archivo que queres shortcutear 
    'strSCIcon es el path del archivo.ico o el ejecutable (si hay multiples
    'iconos podes poner ,y el index number empezando por 0) 
    'si no pones nada toma el icono por default 
    'strSCDesc es la descripción 
    'strSCWorking es el directorio de trabajo 
    
        Set objShell = CreateObject("WScript.Shell") 
        Set objShortCut = objShell.CreateShortcut(strSCName) 
        objShortCut.TargetPath = strSCTarget 
        if strSCIcon <> "" then objShortCut.IconLocation = strSCIcon 
        objShortCut.Description = strSCDesc 
        objShortCut.WorkingDirectory = strSCWorking 
        objShortCut.Save 
    End Function  


    Un saludo

    Fernando Reyes [MS MVP]
    MCSA 2000/2003
    MCSE 2000/2003
    MCITP EnterpriseAdministrator
    Web: http://freyes.svetlian.com
    Blog: http://urpiano.wordpress.com
    RSS: http://urpiano.wordpress.com/feed/
    freyes.champú@champú.mvps.org
    (Aclárate la cabeza si quieres escribirme)


    jueves, 19 de abril de 2012 9:47
    Moderador

Todas las respuestas

  • Tienes dos fallos:

    1. Cuando creas un objeto Folder con el método Namespace del objeto Shell, especificas la carpeta del escritorio, pero no has definido antes la constante que la identifica.
    2. Cuando montas la ruta y nombre del acceso directo no precedes al nombre de un slash inverso, con lo que se creará el acceso directo en la raíz del perfil del usuario y tendrá por nombbre  el de la carpeta del escritorio seguido de NAME (si es un XP español será el acceso directo c:\Documents and settings\usuario\EscritorioNAME.lnk), porque la propiedad Path de un objeto Folder te devuelve la ruta de la carpeta sin el slash inverso final.

    Así pues, para que te funcione, debes modificar tu script a esto:

    'Constante del escritorio del usuario que ejecuta el script
    Const DESKTOP = 0
    
    'esto te obtiene un objeto haciendo referencia al escritorio en el perfil del usuario 
    Set objShellApp = CreateObject("Shell.Application") 
    Set objDesktop = objShellApp.Namespace(DESKTOP) 
    Set objDesktopItem = objDesktop.Self 
    
    'esto llama a la función para crear el Shorcut 
    CreateShortCut objDesktopItem.path & "\NAME.lnk", _
                   "RUTAyEJECUTABLE.EXE", "", "DESCRIPCION", _
                   "DIRECTORIO DE EJECUCION" 
    
    function CreateShortCut(strSCName, strSCTarget, strSCIcon, strSCDesc, strSCWorking) 
    'Funcion para crear Shorcut 
    'strSCName es el nombre del shorcut 
    'strSCTarget es el ejecutable o archivo que queres shortcutear 
    'strSCIcon es el path del archivo.ico o el ejecutable (si hay multiples
    'iconos podes poner ,y el index number empezando por 0) 
    'si no pones nada toma el icono por default 
    'strSCDesc es la descripción 
    'strSCWorking es el directorio de trabajo 
    
        Set objShell = CreateObject("WScript.Shell") 
        Set objShortCut = objShell.CreateShortcut(strSCName) 
        objShortCut.TargetPath = strSCTarget 
        if strSCIcon <> "" then objShortCut.IconLocation = strSCIcon 
        objShortCut.Description = strSCDesc 
        objShortCut.WorkingDirectory = strSCWorking 
        objShortCut.Save 
    End Function  


    Un saludo

    Fernando Reyes [MS MVP]
    MCSA 2000/2003
    MCSE 2000/2003
    MCITP EnterpriseAdministrator
    Web: http://freyes.svetlian.com
    Blog: http://urpiano.wordpress.com
    RSS: http://urpiano.wordpress.com/feed/
    freyes.champú@champú.mvps.org
    (Aclárate la cabeza si quieres escribirme)


    jueves, 19 de abril de 2012 9:47
    Moderador
  • Genial!!!

    El slash lo he borrado por accidente al crear el post, igual que la del final del directorio de trabajo, pero haces bien en apuntarlo para si este script le sirve a alguien más.

    También he añadido la propiedad arguments, por si a alguien le hace falta. (objShortcut.Arguments)

    Así finalmente el script queda asi:

    ---------------------------

    'Constante del escritorio del usuario que ejecuta el script
    Const DESKTOP = 0

    'esto te obtiene un objeto haciendo referencia al escritorio en el perfil del usuario 
    Set objShellApp = CreateObject("Shell.Application") 
    Set objDesktop = objShellApp.Namespace(DESKTOP) 
    Set objDesktopItem = objDesktop.Self 

    'esto llama a la función para crear el Shorcut 
    CreateShortCut objDesktopItem.path & "\nombre.lnk", "RutaYEjecutable.EXE", "argumentos", "", "descripcion", "RutaAlDirectorioDeEjecución\" 

    function CreateShortCut(strSCName, strSCTarget, strSCArguments, strSCIcon, strSCDesc, strSCWorking) 
    'Funcion para crear Shorcut 
    'strSCName es el nombre del shorcut 
    'strSCTarget es el ejecutable o archivo que queres shortcutear 
    'strSCArguments son los arguments que le pasamos al ejecutable
    'strSCIcon es el path del archivo.ico o el ejecutable (si hay multiples iconos podes poner ,y el index number empezando por 0) 
    'si no pones nada toma el icono por default 
    'strSCDesc es la descripción 
    'strSCWorking es el directorio de trabajo 

    Set objShell = CreateObject("WScript.Shell") 
    Set objShortCut = objShell.CreateShortcut(strSCName) 
    objShortCut.TargetPath = strSCTarget 
    objShortCut.Arguments = strSCArguments
    if strSCIcon <> "" then objShortCut.IconLocation = strSCIcon 
    objShortCut.Description = strSCDesc 
    objShortCut.WorkingDirectory = strSCWorking 
    objShortCut.Save 
    End Function 

    ----------------------

    y funciona perfecto!

    Ahora voy a ponerlo en la directiva que sea y lo publico.

    Muchas gracias.

    jueves, 19 de abril de 2012 10:17