Problemas con la secuencia de comandos VB

Problemas con la secuencia de comandos VB

Hace un tiempo publiqué una pregunta solicitando un script VB para eliminar un acceso directo "TeamViewer 12 Host" del escritorio de todos, si existiera. Local no remoto. Lo ejecuté en mi estación de trabajo con Windows 10 y funcionó. Incluso compensó la redirección de mi escritorio a un servidor. El problema es que no puedo hacerlo funcionar en la computadora de otra persona. En el caso de todos los demás, aunque sean administradores locales, reciben un error de Acceso denegado cuando intentan eliminarlo. Ellos también son administradores locales. Incluso intenté ejecutarlo desde un símbolo del sistema elevado. Sin alegría. Lo extraño es que puedo acceder a él a través del Explorador de archivos y eliminarlo sin problemas. Lo único que se me ocurre es que es algo que está en el guión. ¿Alguna idea de lo que está pasando?

    ' Specify filename to remove from user desktops
strShortcut = "TeamViewer 12 Host.lnk"

' Create file system object
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")

' Find root of user data folder (C:\USERS on recent versions of Windows)
strUsers = objFSO.GetParentFolderName(objFSO.GetParentFolderName(objShell.SpecialFolders("Desktop")))
Set objUsers = objFSO.GetFolder(strUsers)

' Check each user folder, and look for our file in the DESKTOP subfolder
For Each objFolder In objUsers.SubFolders
    strCheck = objFolder & "\Desktop\" & strShortcut
    Wscript.Echo "Checking:" & strCheck
    ' If shortcut file exists remove it
    If objFSO.FileExists(strCheck) Then
        Wscript.Echo "Deleting:" & strCheck
        objFSO.DeleteFile(strCheck)
    End If
Next

Respuesta1

Si desea evitar el problema del escritorio redirigido y el problema de permisos creado por la unión "Todos los usuarios", puede codificar el directorio de búsqueda y omitir cualquier ruta de búsqueda que incluya "Todos los usuarios". Ejemplo (los dos cambios están marcados con comentarios):

strShortcut = "TeamViewer 12 Host.lnk"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")

strUsers = "C:\Users" ' <-- or "C:\Documents and Settings" for XP, etc.
Set objUsers = objFSO.GetFolder(strUsers)

For Each objFolder In objUsers.SubFolders
    strCheck = objFolder & "\Desktop\" & strShortcut
    If InStr(strCheck, "All Users") = 0 Then ' <-- SKIP "All Users" to avoid permission problems
        Wscript.Echo "Checking:" & strCheck
        If objFSO.FileExists(strCheck) Then
            Wscript.Echo "Deleting:" & strCheck
            objFSO.DeleteFile(strCheck)
        End If
    End If
Next

Respuesta original:

Mencionaste que tu escritorio es redirigido a una ubicación de red. Si sus usuarios tienen derechos de acceso a la ruta de su perfil de red ( strUsersen este contexto),deberíaRecibe un error de "Acceso denegado" cuando el For Eachbucle intenta eliminar un archivo del escritorio redirigido de otro usuario.

Ejemplo: Eliminar \\fileserver\profiles\YourUser\Desktop\TeamViewer 12 Host.lnkestará bien, pero eliminar \\fileserver\profiles\SomeOtherUser\Desktop\TeamViewer 12 Host.lnkdará "Acceso denegado".

información relacionada