不好意思,没有实现查找域用户的功能,周末一直在上课,没什么时间,要实现域用户功能,其实也简单,目前我主要是不确定域用户在所有者列表里是怎么表示的
# w T% e' d" Q2 ^
附件中的TXT直接下载就行了,我排好了格式,看着比较舒服
% X* Y, H u* u4 X2 k! }: [
哪位达人如果觉得这个东西有修改的价值,希望修改后能给俺过过目,学习一下
% T" E5 p' O8 a# g9 @% b
& P: f7 b2 U1 B) t
添加的功能是:
W) V k/ y8 Z1.实现了两栖功能,也就是说,可以直接双击执行,也可以在命令行下用目录名做参数来执行~~~这个是我在上课时突然跳出来的念头.5.1只能在命令行下使用,5.2又不能在命令行下使用,我试着添加了几句判断语句,发现实现起来没有想象中那么难,呵呵,主要是对WScript.arguments的判断
$ n, { U* q- }- ~) `
! c5 ?! W. ~/ q; A4 Q! @0 q2.判断参数,如果最后一位是问号,则弹出窗口,说明使用方法
5 L$ f4 ]; \6 z. i9 U3 x) K
3 N2 Q- d7 H7 k+ ]
3.如果输入为空,自动退出,不会再报错
复制内容到剪贴板
代码:
'查看是否有参数,如果有参数,则统计参数所指的目录,如果没有参数,则提示用户输入
If WScript.arguments.count = 0 Then
G = InputBox("本程序将统计目录中文件和文件夹的所有者"&Chr(10)&Chr(10)&"请输入你要统计的盘符或目录: ","统计目录")
Else
G = WScript.arguments(0)
End If
'如果参数最后一位是:"?",则弹出窗口提供简单说明
If Right(G,1)="?" Then
MsgBox "本程序将统计目录中所有文件和文件夹的所有者"&Chr(10)&Chr(10)&"使用方法:"&Chr(10)&"命令行下: '脚本名 目录名' 或者直接双击执行",64,"使用说明"
Wscript.Quit
End If
'如果输入为空则退出
If G = "" Then
Wscript.Quit
End If
'检查输入的目录字符串是否在最后有"\",如果没有则加上
If InStrRev(G,"\")<Len(G) Then
G = G & "\"
End If
Set oFSO = CreateObject("Scripting.FileSystemObject") '创建一个文件系统对象
'检查输入的目录是否存在
If Not (oFSO.FolderExists(G)) Then
MsgBox "输入的目录"&G&"不存在,程序终止",16,"错误"
Wscript.Quit
End If
Set TXT0 = oFSO.OpenTextFile (G &"ALLTXT.TXT",8,true) '创建文本文件,用来记录administrators的文件和文件夹,并在最后合并所有用户
Set TXT1 = oFSO.OpenTextFile (G &"Other_TXT.TXT",8,true) '用来记录不明用户
Set objWMI = GetObject("winmgmts:") '本句和下句是获取一个WMI对象,用来检索目录中的文件和文件夹
Set oFiles = objWMI.ExecQuery("ASSOCIATORS OF {Win32_Directory.Name='"&G&"'}" & "where ResultClass = CIM_logicalfile")
Set objNetwork = CreateObject("Wscript.Network") '创建一个Wscript.Network对象,用来获取所有用户的列表
strComputer = objNetwork.ComputerName
Set colAccounts = GetObject("WinNT://" & strComputer & "")
colAccounts.Filter = Array("user")
'统计每个用户的文件和文件夹
For Each objUser In colAccounts '对每个用户来分别检索所有文件,其实这样效率很低,所以该程序执行时间有点长
TotalSize = 0
H = objUser.Name
Set TXT = oFSO.CreateTextFile (G & objUser.Name & "_TXT.TXT",true) '为每一个用户创建一个"用户名_TXT.TXT"的文本文件
For Each oFile In oFiles '枚举检索到的每一个文件或文件夹
strFile = oFile.name
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery ("ASSOCIATORS OF {Win32_LogicalFileSecuritySetting='" & strFile & "'}" & " WHERE AssocClass = Win32_LogicalFileOwner ResultRole=Owner") '检索文件的安全设置,找到OWNER
For Each objItem in colItems '检查OWNER是否当前用户,如果是的话,就记录到当前用户的TXT文件中
If objItem.AccountName = H then
TXT.WriteLine( "--------------------------------------------------------------")
TXT.WriteLine( oFile.name)
TXT.WriteLine( "类型: " & oFile.FileType)
'跳过检索目录本身,如果输入的目录是根盘符,也跳过其中的system volume information目录,否则会提示无权限
If oFile.name = G&"system volume information" OR oFile.name = G then
exit for
End If
S = 0
'检查当前对象是文件还是文件夹,两者采用不同的方式获取大小
If oFile.FileType="File Folder" then
Set objFolder = oFSO.GetFolder(oFile.name)
S= Cint(objFolder.Size/1024/1024)
Else
S= Cint(oFile.FileSize/1024/1024)
End If
TXT.WriteLine( "大小: " & S &"MB")
TotalSize = TotalSize + S
End If
Next
Next
TXT.WriteLine( "--------------------------------------------------------------")
TXT.WriteLine( "属于用户 "&H&" 的文件和文件夹总大小为: " & TotalSize &"MB")
TXT.WriteLine( "※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※")
Next
TXT.Close
'统计属于管理员组及不明用户的文件和文件夹
TotalSize = 0
TotalSize1 = 0
For Each oFile In oFiles
strFile = oFile.name
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery ("ASSOCIATORS OF {Win32_LogicalFileSecuritySetting='" & strFile & "'}" & " WHERE AssocClass = Win32_LogicalFileOwner ResultRole=Owner")
For Each objItem in colItems
If objItem.AccountName = "Administrators" then
TXT0.WriteLine( "--------------------------------------------------------------")
TXT0.WriteLine( oFile.name)
TXT0.WriteLine( "类型: " & oFile.FileType)
If oFile.name = G&"system volume information" OR oFile.name = G then
exit for
End If
S = 0
If oFile.FileType="File Folder" then
Set objFolder = oFSO.GetFolder(oFile.name)
S= Cint(objFolder.Size/1024/1024)
Else
S= Cint(oFile.FileSize/1024/1024)
End If
TXT0.WriteLine( "大小: " & S &"MB")
TotalSize = TotalSize + S
ElseIf objItem.AccountName = "" then
TXT1.WriteLine( "--------------------------------------------------------------")
TXT1.WriteLine( oFile.name)
TXT1.WriteLine( "类型: " & oFile.FileType)
If oFile.name = G&"system volume information" then
exit for
End If
S = 0
If oFile.FileType="File Folder" then
Set objFolder = oFSO.GetFolder(oFile.name)
S= Cint(objFolder.Size/1024/1024)
Else
S= Cint(oFile.FileSize/1024/1024)
End If
TXT1.WriteLine( "大小: " & S &"MB")
TotalSize1 = TotalSize1 + S
End If
Next
Next
TXT0.WriteLine( "--------------------------------------------------------------")
TXT0.WriteLine( "属于Administrators的文件和文件夹总大小为: " & TotalSize &"MB")
TXT0.WriteLine( "※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※")
TXT1.WriteLine( "--------------------------------------------------------------")
TXT1.WriteLine( "属于不明用户的文件和文件夹总大小为: " & TotalSize1 &"MB")
TXT1.WriteLine( "※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※")
TXT1.Close
'合并所有结果文件
Set TXT1 = oFSO.OpenTextFile (G &"Other_TXT.TXT",1)
strtxt = TXT1.ReadAll
TXT0.WriteLine strtxt
TXT1.Close
For Each objUser In colAccounts
Set TXT = oFSO.OpenTextFile (G & objUser.Name & "_TXT.TXT",1)
strtxt = TXT.ReadAll
TXT0.WriteLine strtxt
TXT.Close
Next
TXT0.Close
oFSO.DeleteFile G&"*_TXT.TXT"
MsgBox "统计完成,结果保存在"&G&"中生成的ALLTXT.TXT文件中",64,"OK"
Set objshell = CreateObject("Wscript.Shell")
objshell.run "notepad.exe " & G & "ALLTXT.TXT"