
しばらく前に、ショートカット「TeamViewer 12 Host」を、もし存在するなら、誰のデスクトップからでも削除する VB スクリプトを求める質問を投稿しました。リモートではなくローカルです。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
リダイレクトされたデスクトップの問題と、「すべてのユーザー」ジャンクションによって作成されたアクセス許可の問題をスキップしたい場合は、検索ディレクトリをハードコードし、「すべてのユーザー」を含む検索パスをスキップすることができます。例 (2 つの変更はコメントでマークされています):
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
「アクセスが拒否されました」というメッセージが表示されます。