Probleme mit VB Script

338
ZiggyStardust

Vor einiger Zeit habe ich eine Frage gestellt, in der ich nach einem VB-Skript gefragt werde, um eine Verknüpfung "TeamViewer 12 Host" vom Desktop von jedermann und jedem zu löschen, falls vorhanden. Lokal nicht entfernt Ich habe es auf meiner Windows 10-Workstation ausgeführt und es hat funktioniert. Es kompensierte sogar, dass mein Desktop auf einen Server umgeleitet wurde. Das Problem ist, dass ich es nicht schaffen kann, auf dem Computer eines anderen zu arbeiten. Bei allen anderen erhalten sie, obwohl sie lokale Administratoren sind, die Fehlermeldung "Zugriff verweigert", wenn sie versucht, sie zu löschen. Sie sind auch lokale Administratoren. Ich habe sogar versucht, es von einer erhöhten Eingabeaufforderung aus auszuführen. Keine Freude. Die seltsame Sache ist, dass ich dazu über den File Explorer navigieren und es löschen kann. Ich denke nur, dass ich denken kann, 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 
0
Hilft es, beim Start des Skripts `on error resume next` hinzuzufügen? HelpingHand vor 7 Jahren 0

1 Antwort auf die Frage

0
Tanner Jotblad

Wenn Sie das Problem des umgeleiteten Desktops und das von der Junction "All Users" erzeugte Berechtigungsproblem überspringen möchten, können Sie das Suchverzeichnis hartcodieren und alle Suchpfade mit "All Users" überspringen. 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 an einen Netzwerkstandort umgeleitet wird. Wenn Ihre Benutzer über Durchquerungsrechte für den Pfad Ihres Netzwerkprofils verfügen ( strUsersin diesem Zusammenhang), sollten sie die Fehlermeldung "Zugriff verweigert" erhalten, da die For EachSchleife versucht, eine Datei vom umgeleiteten Desktop eines anderen Benutzers zu löschen.

Beispiel: Das Löschen \\fileserver\profiles\YourUser\Desktop\TeamViewer 12 Host.lnkist in Ordnung, aber beim Löschen \\fileserver\profiles\SomeOtherUser\Desktop\TeamViewer 12 Host.lnkwird "Zugriff verweigert" angezeigt.

Berechnet nicht. Mein Desktop wird umgeleitet. Ihr gehört nicht. Es funktioniert bei mir. Funktioniert nicht bei ihnen. In Verbindung damit wäre der Fehler auch dann die Datei nicht gefunden und nicht der Zugriff verweigert. Versuchen Sie es auf Ihrem lokalen Computer. Fügen Sie in dem Ordner User \ Public \ Public Desktop eine Verknüpfung von "TeamViewer 12 Host" ein, und versuchen Sie das Skript. ZiggyStardust vor 7 Jahren 0
Alle unsere Domain-Konten haben Desktops umgeleitet, das war also mein Kontext. Das Ausführen von einem lokalen Administratorkonto aus funktioniert für mich, solange sich die Verknüpfung nicht auf dem öffentlichen Desktop befindet. In diesem Fall wird immer noch "Permission Denied" angezeigt. Ist für Ihre Benutzer die Verknüpfung auf ihrem Desktop oder dem öffentlichen Desktop? Tanner Jotblad vor 7 Jahren 0
Die Verknüpfung kann sich an einer beliebigen Stelle befinden, in der Regel befindet sie sich jedoch im öffentlichen \ Desktop. Sie sehen jetzt das Problem. Ich kann zu diesem Ordner navigieren und das Symbol manuell löschen, aber das Skript gibt "Zugriff verweigert" aus. Das würde mich glauben machen, dass das Problem im Skript steckt. Wenn Sie das Skript an einer erhöhten Eingabeaufforderung ausführen, erhalten Sie "Zugriff verweigert". ZiggyStardust vor 7 Jahren 0
Ich denke, das Problem ist der öffentliche Desktop. Da Ordner alphabetisch geprüft werden, wird "All Users" geprüft, bevor "Public" und "All Users" eine Verbindung zu "Public" mit unterschiedlichen Berechtigungen ist. Setzen Sie vor dem "Checking:" etwas Ähnliches ein: echo: `Wenn InStr (strCheck," All Users ") <> 0, dann Wscript.Echo" All Users "Else" überspringen Tanner Jotblad vor 7 Jahren 0
Das hat funktioniert, aber eigentlich mehr Fragen aufgeworfen. Der erste Grund, warum es nicht von "All Users" gelöscht werden konnte? Local Admin und lief auf einer erhöhten Aufforderung nicht weniger, aber die eigentliche Frage .... Ich weiß, warum es jetzt bei mir funktionierte. Es hat nie auf dem Laufwerk C: geschaut. Es wurde festgestellt, dass sich mein Desktop auf dem Server befand und nie C angezeigt hat. Daher wurde nie ein Ordner "All Users" gefunden. Ich weiß nicht genug über VB, aber funktioniert dieses Skript auch, wenn ein Benutzer nicht angemeldet ist? ZiggyStardust vor 7 Jahren 0
Was meinen Sie mit einem nicht angemeldeten Benutzer? Planen Sie die einmalige Ausführung für alle vorhandenen Benutzer oder die Einrichtung beim ersten Anmelden (z. B. über Gruppenrichtlinien)? In jedem Fall ist ein Benutzerkontext erforderlich, unter dem ausgeführt wird Tanner Jotblad vor 7 Jahren 0
Der Grund, warum es für "All Users" nicht funktioniert, liegt vermutlich daran, dass sich die Berechtigungen für \ All Users \ Desktop (als Junction) von denen für \ Public \ Desktop unterscheiden. Mit "Alle Benutzer" können Administratoren zwar vollständige Kontrolle erhalten, jedoch nur für diesen Ordner. Mit "Öffentlich" können Administratoren vollständige Kontrolle über diesen Ordner sowie über Unterordner und Dateien erhalten. Tanner Jotblad vor 7 Jahren 0
Es wird Teil eines RMM-Pakets sein und kann unabhängig davon ausgeführt werden, ob ein Benutzer angemeldet ist oder nicht. Ich bin nicht sicher, ob die Schleife richtig ist. Ich würde denken, dass die Schleife für jedes Profil sein würde. Überprüfen Sie den Desktop auf das Symbol. Ich habe mir die Schleife auf meinem Computer angesehen. Es ging direkt auf den Server und sah C: nie an. Deshalb hat es bei mir funktioniert. Wenn noch nie in C: \ All Users oder irgendwo in C: nachgesehen wurde. Daher die Frage nach dem Benutzerkontext. Es sieht so aus, als habe es mein Profil gefunden und dann davon ausgegangen, dass alle anderen am selben Ort waren. Nicht der Fall. ZiggyStardust vor 7 Jahren 0
Die Schleife eignet sich für lokale Benutzer (wenn alle Benutzer übersprungen werden). Es funktioniert einfach nicht für Sie, da sich Ihr Desktop in einem anderen Kontext befindet (siehe das Beispiel in meiner Antwort). Welcher Benutzer wird das Skript für Ihr Paket ausführen? Tanner Jotblad vor 7 Jahren 0
Ich sage Ihren Kommentar, aber ich denke, Sie haben vermisst, worauf ich mich bezog. Der Grund, warum es bei mir funktioniert hat, ist richtig, weil der Ordner "Alle Benutzer" nicht angezeigt wurde. Dies ist ein Problem und ein Segen. Es ist ein Segen, dass der Ordner Alle Benutzer ein problematisches Kind ist und nicht daraus gelöscht werden kann. Das gesamte Skript ist jedoch nutzlos, da es nicht alle Profile betrachtet. ZiggyStardust vor 7 Jahren 0
In meinem Fall sah es aus und mein Desktop ist auf dem Server (umgeleitet). Es fand meinen Desktop und blieb dann auf dem Server, um nach anderen zu suchen. Die Profile auf dem Laufwerk C: wurden vollständig übersprungen, und auf dem Laufwerk C: waren es 5 oder 6. Die Ordnerumleitung kann pro Benutzer durchgeführt werden, wenn sich mein Desktop auf dem Server befindet. Die anderen 5 Benutzer dieses Computers haben keine Desktops umgeleitet, sodass sich der Desktop auf Laufwerk C: befindet. Es sah nicht einmal die an. Es schaute sich den aktuellen Benutzerkontext (meinen) an und blieb dann auf dem Server und suchte nach anderen. Es hat nie auf Laufwerk C: geschaut. ZiggyStardust vor 7 Jahren 0
Deshalb denke ich, dass die Look-Kontrolle nicht korrekt ist. Es sollte jedes Profil durchlaufen und feststellen, wo sich der Desktop für dieses Profil befindet. Dann überprüfen Sie es für das Symbol. ZiggyStardust vor 7 Jahren 0
Es wird jedoch in Ordnung sein, wenn es im Kontext eines lokalen Benutzers ausgeführt wird und Sie die Logik "All Users" überspringen, weshalb ich gefragt wurde, unter welchem ​​Benutzer das Skript ausgeführt werden soll. Wenn Sie es sind, dann wird es ja nicht so funktionieren, wie es ist. In welchem ​​Fall könnten Sie C: \ Benutzer nicht einfach als Root-Code kodieren, wenn Sie wissen, dass dies für sie der Fall sein wird? Wenn es sich um einen lokalen Administrator handelt, sollte es gut funktionieren, da C: \ trotzdem betrachtet wird. Tanner Jotblad vor 7 Jahren 0
Es gibt keine Möglichkeit zu wissen, welcher Benutzer angemeldet ist, wenn das Skript ausgeführt wird. Ich bin damit einverstanden, dass es hart codiert sein sollte, C: \ Users durchzublättern und herauszufinden, wo jeder Benutzer den Desktop (und alle Benutzer) überspringt. Es kann nicht darauf basieren, dass sich ein Benutzer angemeldet hat, wenn er ausgeführt wird. Wissen Sie, wie Sie die Änderungen vornehmen? ZiggyStardust vor 7 Jahren 0
Unabhängig davon muss _as_ einige Benutzer ausgeführt werden; es kann nicht umsonst laufen. Dies wird wahrscheinlich überall angegeben, wo Sie das Skript einrichten. Ich habe meine Antwort mit den Änderungen aktualisiert. Tanner Jotblad vor 7 Jahren 0
Es wird als "System" ausgeführt. Ich habe "Desktop" in "Profile" geändert und es wurde durch den Ordner "Profil" auf dem Laufwerk C: geleitet, was korrekt ist. Ich hatte gehofft, dass mein Desktop, als er zu meinem Profil kam, erkannt wurde, dass er auf den Server umgeleitet wurde und nicht. Es ist für mein Blut etwas kompliziert geworden. Danke für all die Hilfe. ZiggyStardust vor 7 Jahren 0