如何从txt计算机列表中远程删除%appdata%等文件夹?

时间:2013-10-30 03:40:40

标签: vbscript

我正在尝试删除将从txt文件中读取的多个文件夹。我不确定如何让它在拉动当前登录用户的同时循环浏览文本文件中的计算机。我尝试了一些代码但没有足够的经验将它与我现有的代码合并。

我有一个工作脚本可以删除txt文件中计算机列表中的文件夹,但%APPDATA%等除外...这就是我使用vbscript的原因。

请注意,除了Windows 7安装的软件之外,我无法使用任何软件。这样可以消除psexec等...

非常感谢任何帮助,谢谢!

InputFile = "C:\complist.txt"
Const DeleteReadOnly = True
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFile = objFSO.OpenTextFile(InputFile)
Do While Not (objFile.AtEndOfStream)
strComputer = objFile.ReadLine
On Error Resume Next
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFolder("\\" & strComputer & "\c$\test")
objFSO.DeleteFolder("\\" & strComputer & "\c$\%APPDATA%\PGP Corporation")
objFSO.DeleteFolder("\\" & strComputer & "\c$\%LOCALAPPDATA%\PGP Corporation")
objFSO.DeleteFolder("\\" & strComputer & "\c$\%USERPROFILE%\Documents\PGP Corporation")
objFSO.DeleteFolder("\\" & strComputer & "\c$\%ALLUSERSPROFILE%\Application Data\PGP Corporation")
objFSO.DeleteFolder("\\" & strComputer & "\c$\%ALLUSERSPROFILE%\Start Menu\Programs\PGP")
objFSO.DeleteFolder("\\" & strComputer & "\c$\%CommonProgramFiles%\PGP Corporation")
objFSO.DeleteFolder("\\" & strComputer & "\c$\%ProgramFiles%\PGP Corporation")
objFSO.DeleteFolder("\\" & strComputer & "\c$\Windows\System32\config\systemprofile\AppData\Local\PGP Corporation")
Err.clean
Loop

MsgBox "Done"

1 个答案:

答案 0 :(得分:2)

首先,环境变量在FileSystemObject方法中不起作用。完全没有。您需要将它们扩展到实际路径,例如像这样:

Set sh = CreateObject("WScript.Shell")
dir = sh.ExplandEnvironmentStrings("\\" & strComputer & "\c$\%APPDATA%\PGP Corporation")
objFSO.DeleteFolder dir

此外,变量对于运行脚本的用户和系统是本地的,即上述将解析运行脚本的系统上用户的%APPDATA%,而不是{{1}指定的系统}。您需要从远程主机的注册表中读取变量,例如像这样:

strComputer

此外,某些变量(特别是Set reg = GetObject("winmgmts://" & strComputer & "/root/default:StdRegProv") HKLM = &h80000002 key = "SOFTWARE\Microsoft\Windows\CurrentVersion" vn = "CommonFilesDir" rc = reg.GetStringValue(HKLM, key, vn, val) If rc = 0 Then commonProgramFiles = val Else WScript.Echo "Cannot read value from remote registry (" & rc & ")." End If )存储在注册表中的位置/方式因Windows版本而异。在Windows XP中,%ALLUSERSPROFILE%是两个注册表值%ALLUSERSPROFILE%ProfilesDirectory的组合,而在Windows 7中,它来自注册表值AllUsersProfile(全部位于{{1} }})。

最后,但并非最不重要的是,您的一些变量是特定于用户的(即ProgramDataHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList%APPDATA%),因此您需要为每个用户处理它们在远程主机上。

一种(可称不太精确但更直接)的方法是从远程注册表中读取配置文件文件夹的位置,然后处理远程主机上该文件夹的所有子文件夹。

%LOCALAPPDATA%