Problemas com o script VB

0

Há algum tempo atrás eu postei uma pergunta pedindo um script VB para excluir um atalho "TeamViewer 12 Host" da área de trabalho de qualquer um e todos, se existisse. Local não remoto. Eu corri na minha estação de trabalho do Windows 10 e funcionou. Ele até compensou meu desktop sendo redirecionado para um servidor. O problema é que não consigo fazer funcionar no computador de outra pessoa. Em todos os outros, mesmo que sejam administradores locais, eles obtêm um erro de acesso negado quando ele tenta excluí-lo. Eles também são administradores locais. Eu até tentei executá-lo a partir de um prompt de comando elevado. Sem alegria. O estranho é que eu posso navegar para ele via File Explorer e excluí-lo sem nenhum problema. Só acho que posso pensar é que é algo 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
    
por ZiggyStardust 16.03.2017 / 19:04

1 resposta

0

Se você quiser ignorar o problema da área de trabalho redirecionada e o problema de permissões criado pela junção "Todos os usuários", poderá codificar o diretório de pesquisa e ignorar os 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 perfil de rede ( strUsers neste contexto), eles deverão receber um erro "Acesso negado", pois o loop For Each tentará excluir um arquivo de outro usuário área de trabalho redirecionada.

Exemplo: A exclusão de \fileserver\profiles\YourUser\Desktop\TeamViewer 12 Host.lnk será boa, mas a exclusão de \fileserver\profiles\SomeOtherUser\Desktop\TeamViewer 12 Host.lnk fornecerá "Acesso negado".

    
por 16.03.2017 / 19:43