Некоторое время назад я опубликовал вопрос с просьбой сценария VB удалить ярлык "TeamViewer 12 Host" с любого компьютера и с любого рабочего стола, если он существует. Местный не удаленный. Я запустил его на своей рабочей станции Windows 10, и он работал. Это даже компенсировало перенаправление моего рабочего стола на сервер. Проблема в том, что я не могу заставить его работать на чужом компьютере. На всех остальных, даже если они являются локальными администраторами, они получают ошибку "Отказано в доступе", когда он пытается удалить ее. Они тоже местные администраторы. Я даже пытался запустить его из командной строки с повышенными правами. Нет радости Странно то, что я могу перейти к нему через проводник и удалить его без проблем. Только думаю, что я могу думать, что это что-то в сценарии. Есть идеи, что происходит?

    ' 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

1 ответ1

0

Если вы хотите пропустить проблему перенаправленного рабочего стола и проблему разрешений, созданную соединением "Все пользователи", вы можете жестко закодировать каталог поиска и пропустить любые пути поиска, которые включают "Все пользователи". Пример (два изменения помечены комментариями):

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

Оригинальный ответ:

Вы упомянули, что ваш рабочий стол перенаправлен в сетевую папку. Если ваши пользователи имеют права доступа к пути вашего сетевого профиля (в этом контексте strUsers ), они должны получить ошибку "Отказано в доступе", поскольку цикл « For Each пытается удалить файл с перенаправленного рабочего стола другого пользователя.

Пример: удаление \\fileserver\profiles\YourUser\Desktop\TeamViewer 12 Host.lnk будет в порядке, но удаление \\fileserver\profiles\SomeOtherUser\Desktop\TeamViewer 12 Host.lnk даст «Доступ запрещен».

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .