
Vor einiger Zeit habe ich eine Frage gestellt, in der ich nach einem VB-Skript gefragt habe, um eine Verknüpfung „TeamViewer 12 Host“ von jedem Desktop zu löschen, sofern sie existiert. Lokal, nicht remote. Ich habe es auf meiner Windows 10-Workstation ausgeführt und es hat funktioniert. Es hat sogar die Umleitung meines Desktops auf einen Server kompensiert. Das Problem ist, dass ich es auf keinem anderen Computer zum Laufen bekomme. Auf allen anderen Computern wird beim Versuch, die Verknüpfung zu löschen, eine Zugriffsverweigerungsmeldung angezeigt, obwohl sie lokale Administratoren sind. Auch sie sind lokale Administratoren. Ich habe sogar versucht, es von einer Eingabeaufforderung mit erhöhten Rechten aus auszuführen. Ohne Erfolg. Das Seltsame ist, dass ich über den Datei-Explorer dorthin navigieren und es problemlos löschen kann. Ich kann mir nur vorstellen, dass es etwas im Skript ist. Irgendeine Idee, was los ist?
' 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
Antwort1
Wenn Sie das Problem des umgeleiteten Desktops und das Berechtigungsproblem, das durch die Verknüpfung „Alle Benutzer“ entsteht, umgehen möchten, können Sie das Suchverzeichnis hartcodieren und alle Suchpfade überspringen, die „Alle Benutzer“ enthalten. Beispiel (die beiden Änderungen sind mit Kommentaren gekennzeichnet):
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
Ursprüngliche Antwort:
Sie haben erwähnt, dass Ihr Desktop zu einem Netzwerkstandort umgeleitet wird. Wenn Ihre Benutzer über Durchquerungsrechte für Ihren Netzwerkprofilpfad verfügen ( strUsers
in diesem Zusammenhang),sollenSie erhalten die Fehlermeldung „Zugriff verweigert“, da die For Each
Schleife versucht, eine Datei vom umgeleiteten Desktop eines anderen Benutzers zu löschen.
Beispiel: Das Löschen \\fileserver\profiles\YourUser\Desktop\TeamViewer 12 Host.lnk
ist problemlos möglich, \\fileserver\profiles\SomeOtherUser\Desktop\TeamViewer 12 Host.lnk
führt jedoch zu der Meldung „Zugriff verweigert“.