Problemas com script VB

Problemas com script VB

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 ( strUsersneste contexto), elesdevereceberá um erro "Acesso negado" enquanto o For Eachloop tenta excluir um arquivo da área de trabalho redirecionada de outro usuário.

Exemplo: A exclusão \\fileserver\profiles\YourUser\Desktop\TeamViewer 12 Host.lnkserá aceitável, mas a exclusão \\fileserver\profiles\SomeOtherUser\Desktop\TeamViewer 12 Host.lnkresultará em "Acesso negado".

informação relacionada