知识果然是相通的,以前玩脚本的学到的知识果然还是可以在 C#中被应用。
举个例子,比如说枚举各硬盘分区空闲容量。其实如果只是为了满足自己的好奇心的话用Notepad写个vbs脚本就行了。去下载个ScrpitCenter,里面几乎能想到的都有了。
Const HARD_DISK = 3
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!//" & strComputer & "/root/cimv2")
Set colDisks = objWMIService.ExecQuery _
("Select * from Win32_LogicalDisk Where DriveType = " & HARD_DISK & "")
For Each objDisk in colDisks
Wscript.Echo "DeviceID: "& vbTab & objDisk.DeviceID
Wscript.Echo "Free Disk Space: "& vbTab & objDisk.FreeSpace
Next
现在问题是,假如C#的程序中要集成这个功能,那又该怎么处理呢?
首先需要肯定,C#对WMI提供了支持。当然我们要添加一个引用,System.Management.dll。编码时也要using它。
后续的代码很好理解,照猪画砍了鼻子的大象就行了。
ManagementObjectSearcher query;
ManagementObjectCollection queryCollection;
string sql = " Select * from Win32_LogicalDisk Where DriveType = 3 " ;
query = new ManagementObjectSearcher(sql);
queryCollection = query.Get();
foreach (ManagementObject mo in queryCollection)
... {
MessageBox.Show(String.Format("{0}空闲 {1}", mo["DeviceID"].ToString(), mo["FreeSpace"].ToString()));
}
ManagementObjectCollection queryCollection;
string sql = " Select * from Win32_LogicalDisk Where DriveType = 3 " ;
query = new ManagementObjectSearcher(sql);
queryCollection = query.Get();
foreach (ManagementObject mo in queryCollection)
... {
MessageBox.Show(String.Format("{0}空闲 {1}", mo["DeviceID"].ToString(), mo["FreeSpace"].ToString()));
}
mo的属性正好ScriptCenter里面都告诉我们了。
另外还有一类情况,两边分别提供不同的方法。
比如往AD里添加新用户,vbs可以直接GetObject("LDAP://......"),但C#就有现成的类了,DirectoryEntry。但即便这样vbs的脚本还是有参考价值的,有哪些属性,具体怎么拼写等都可以参考。当然最好还是查MSDN,不过实再想偷懒的话参考ScriptCenter给出的例子也够了。
我也想过,实在不行,干脆动态生成个脚本文件,然后让C# Process.Start调用。不过仅限于想想而已,目前还真没发现有这么实现的必要。
条条道路通罗马,选一条自己喜欢的吧。