
Há algum tempo, postei uma pergunta solicitando um script VB para excluir um atalho "TeamViewer 12 Host" da área de trabalho de qualquer pessoa, se ele existisse. Local não remoto. Executei-o na minha estação de trabalho Windows 10 e funcionou. Até compensou o redirecionamento da minha área de trabalho para um servidor. O problema é que não consigo fazê-lo funcionar no computador de outra pessoa. Em todos os outros, mesmo sendo administradores locais, eles recebem um erro Acesso negado quando tentam excluí-lo. Eles também são administradores locais. Eu até tentei executá-lo em um prompt de comando elevado. Sem alegria. O estranho é que posso navegar até ele através do File Explorer e excluí-lo sem problemas. A única coisa que posso pensar é que é algo que está no roteiro. alguma ideia do que está acontecendo?
' 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
Responder1
Se quiser ignorar o problema da área de trabalho redirecionada e o problema de permissões criado pela junção “Todos os usuários”, você pode codificar o diretório de pesquisa e ignorar quaisquer caminhos de pesquisa que incluam “Todos os usuários”. Exemplo (as duas alterações estão marcadas com comentários):
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
Resposta original:
Você mencionou que sua área de trabalho é redirecionada para um local de rede. Se seus usuários tiverem direitos de passagem para o caminho do seu perfil de rede ( strUsers
neste contexto), elesdevereceberá um erro "Acesso negado" enquanto o For Each
loop tenta excluir um arquivo da área de trabalho redirecionada de outro usuário.
Exemplo: A exclusão \\fileserver\profiles\YourUser\Desktop\TeamViewer 12 Host.lnk
será aceitável, mas a exclusão \\fileserver\profiles\SomeOtherUser\Desktop\TeamViewer 12 Host.lnk
resultará em "Acesso negado".