
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 ( strUsers
en este contexto),deberíaRecibe un error de "Acceso denegado" cuando el For Each
bucle intenta eliminar un archivo del escritorio redirigido de otro usuario.
Ejemplo: Eliminar \\fileserver\profiles\YourUser\Desktop\TeamViewer 12 Host.lnk
estará bien, pero eliminar \\fileserver\profiles\SomeOtherUser\Desktop\TeamViewer 12 Host.lnk
dará "Acceso denegado".