C#与ScriptCenter

来源:互联网 发布:阿里云 ip 代理 编辑:程序博客网 时间:2024/06/08 14:01

知识果然是相通的,以前玩脚本的学到的知识果然还是可以在 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()));
            }

mo的属性正好ScriptCenter里面都告诉我们了。

另外还有一类情况,两边分别提供不同的方法。

比如往AD里添加新用户,vbs可以直接GetObject("LDAP://......"),但C#就有现成的类了,DirectoryEntry。但即便这样vbs的脚本还是有参考价值的,有哪些属性,具体怎么拼写等都可以参考。当然最好还是查MSDN,不过实再想偷懒的话参考ScriptCenter给出的例子也够了。

我也想过,实在不行,干脆动态生成个脚本文件,然后让C# Process.Start调用。不过仅限于想想而已,目前还真没发现有这么实现的必要。

条条道路通罗马,选一条自己喜欢的吧。