加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

.Net:使用ManagementObject与Win32_Class获取系统信息

(2015-10-15 12:12:12)
标签:

wmi

management

系统信息

硬件信息

分类: DotNet/SQLServer
==============================
环境:vs2015/.Net4.0
==============================

通过System.Management命名空间下的对象,可以轻松获取系统的软硬件信息。以获取Windows服务为例。

1. 创建一个WinForm工程,手动引入System.Management。
2. Import System.Management到代码文件

3. 查询代码如下:
http://s9/mw690/003vJfUOgy6WdDUNcbm48&690
http://s11/mw690/003vJfUOzy6WdErgs3gaa&690

ManagementObjectSearcher.Get获取的是所有实例。例如我们查询本机的物理内存,如果本机只有1条物理内存,那么ManagementObjectSearcher.Get获取的ManagementObjectCollection中就只有1条数据。

ManagementObjectSearcher的查询语句和SQL语句类似。也可以通过添加查询条件直接筛选结果。例如上面的代码,可以将查询语句修改为 SELECT * FROM Win32_Service WHERE STATE='Running' 来直接查询当前正在运行中的服务。

关于Win32_Class下的所有对象,可以通过以下地址查看:

http://s7/mw690/003vJfUOzy6WdEvlz4G36&690

附:
=========================================
Imports System.Management
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim searcher As ManagementObjectSearcher = New ManagementObjectSearcher()
        searcher.Query = New ObjectQuery("SELECT * FROM Win32_Service WHERE STATE='Running'")
        Dim result As ManagementObjectCollection = searcher.Get()
        If (Not result Is Nothing) AndAlso (result.Count > 0) Then

            For Each o In result
                Dim serviceName As String = o.GetPropertyValue("Name")
                Dim startMode As String = o.GetPropertyValue("StartMode")
                Dim state As String = o.GetPropertyValue("State")
                txtConsole.AppendText(startMode & vbTab & state & vbTab & serviceName & vbNewLine)
            Next
        End If
    End Sub
End Class
=========================================

以下是使用PowerShell的查询代码。如果想遍历输出某个Class下的所有属性的名称与对应的值,可以通过遍历ManagementObject.Properties,输出每个Property的Name和Value来实现。

Clear-Host
[System.Management.ManagementObjectSearcher]$searcher = New-Object System.Management.ManagementObjectSearcher;
$searcher.Query.QueryString = "SELECT * FROM Win32_ComputerSystem";
[System.Management.ManagementObjectCollection]$col = $searcher.Get();
foreach($M In $col) {
    foreach($MM In $M.Properties) {
        Write-Host $MM.Name `t $MM.Value | Format-List
    }
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有