不久前,我发布了一个问题,要求编写一个 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
如果要跳过重定向桌面的问题和“所有用户”连接点造成的权限问题,您可以对搜索目录进行硬编码,并跳过任何包含“所有用户”的搜索路径。示例(两个更改都标有注释):
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
会出现“拒绝访问”的情况。