WMI é uma recomendação do setor para desenvolver uma tecnologia padronizada para acessar informações de gerenciamento em ambientes corporativos. Essas informações incluem o estado da memória do sistema, uma lista de aplicativos clientes atualmente instalados e outros dados sobre o status do cliente.
WMI é uma arquitetura de gerenciamento de sistema escalável que adota uma interface orientada a objetos unificada, baseada em padrões e extensível. Ele fornece um método padrão de interação com informações do administrador do sistema e a API WMI subjacente, usada principalmente por desenvolvedores de aplicativos de gerenciamento de sistema e administradores de sistema para acessar e operar informações de gerenciamento de sistema.
O WMI pode ser usado para gerar ferramentas para organizar e gerenciar informações do sistema, permitindo que os administradores do sistema monitorem as atividades do sistema mais de perto.
O WMI fornece um rico conjunto de serviços de gerenciamento de sistema integrados ao sistema operacional Microsoft Windows e agora é usado por um grande número de aplicativos, serviços e dispositivos para fornecer recursos de gerenciamento abrangentes para operações de tecnologia da informação e organizações de suporte a produtos. O uso de sistemas de gerenciamento baseados em WMI traz um ambiente de computação mais confiável e maior confiabilidade do sistema, economizando assim despesas empresariais.
O grande número de especificações fornecidas pelo WMI implementa as seguintes tarefas de gerenciamento para muitos aplicativos de ponta, como Microsoft Exchange, Microsoft SQL Server e Microsoft Internet Information Services (IIS).
1. Monitore o desempenho do aplicativo
2. Detecte gargalos ou falhas
3. Gerencie e configure aplicativos
4. Consultar dados do aplicativo (usando consultas e travessias relacionais de objeto)
5. Execute operações de gerenciamento local ou remoto integradas
Abaixo usamos um exemplo para ilustrar as funções poderosas do WMI. Tomando vb6 como coluna:
Referência "Biblioteca Microsoft WMI Scripting V1.1"
O código é o seguinte:
Opção ExplicitDim WithEvents Sink As SWbemSinkDim j As Integer' função: Use componentes wmi para obter informações do computador Cada pequena função é escrita separadamente para que todos possam verificar. sDrive como StringDim sValue As StringDim dblSize As DoubleDim Obj As Variant Dim lIndex As Long Set oWMINameSpace = GetObject("winmgmts:") 'Obter informações da unidadeOn Error Resume NextSet ObjSet = oWMINameSpace.InstancesOf("Win32_DiskDrive") Para cada Obj na lista ObjSet5. .Legenda & " - " & BytesToMegabytes(Obj.Size) & " GB"Next 'Obter informações detalhadas de cada unidadeOn Error GoTo ErrorHandler'Set oWMINameSpace = GetObject("winmgmts:")Set oLogicalDiskSet = oWMINameSpace.InstancesOf("Win32_LogicalDisk")For Each oLogicalDisk In oLogicalDiskSet On Error Retomar próximo sDrive = oLogicalDisk.deviceid ListView1.ListItems.Add , , sDrive lIndex = ListView1.ListItems.Count sValue = oLogicalDisk.Description & "" ListView1.ListItems(lIndex).SubItems(1) = sValue sValue = oLogicalDisk.FileSystem & "" ListView1.ListItems(lIndex).SubItems(2) = sValue sValue = oLogicalDisk.VolumeName & "" ListView1.ListItems(lIndex).SubItems(3) = sValue sValue = oLogicalDisk.VolumeSerialNumber & "" ListView1.ListItems(lIndex).SubItems (4) = sValue sValue = oLogicalDisk.Size & "" If IsNumeric(sValue) ThendblSize = BytesToMegabytes(CDbl(sValue))sValue = CStr(dblSize) & "MB" End If ListView1.ListItems(lIndex).SubItems(5) = sValueNext Limpeza: Definir oLogicalDisk = NothingSet oLogicalDiskSet = NothingSet oWMINameSpace = NothingExit Sub ErrorHandler:MsgBox "" & Err.Description GoTo CleanUp End Sub Private Sub Command1_Click()Unload MeEnd Sub Private Function BytesToMegabytes(Bytes As Double) As Double Dim dblAns As Double dblAns = (Bytes / 1024) / 1024 BytesParaMegabytes = Format(dblAns, "###,###,##0.00")End Function Private Sub Command2_Click()Dim oWMINameSpace As SWbemServicesDim SystemSet As VariantDim System As VariantDim ObjSet As VariantDim Obj As Variant Set oWMINameSpace = GetObject("winmgmts:" )'Sistema operacional definido SystemSet = oWMINameSpace.InstancesOf ("Win32_OperatingSystem") para cada sistema em SystemSet List1.AddItem System.Caption List1.AddItem System.Manufacturer List1.AddItem System.BuildType & "" 'Parece que List1.AddItem System.Version List1.AddItem não pode ser obtido em Win9x System.SerialNumberNext'cpuSet ObjSet = oWMINameSpace.InstancesOf ("Win32_Processor") para cada Obj em ObjSet List2.AddItem Obj.Caption List2.AddItem Obj.currentclockspeed & "Mhz"Próximo final Sub Private Sub Command3_Click()Dim oWMINameSpace As SWbemServicesDim ObjSet As VariantDim Obj As VariantDim Adapter As Variant 'Conjunto de memória oWMINameSpace = GetObject("winmgmts:")Set ObjSet = oWMINameSpace.InstancesOf("Win32_PhysicalMemory")Dim i como string para cada Obj em ObjSet List3.AddItem BytesToMegabytes(Obj.capacity) & " MB" & " Chip"Próximo 'Placa de rede Conjunto Sink = Novo Adaptador de Conjunto SWbemSink = GetObject("winmgmts:")Adapter.InstancesOfAsync Sink, "Win32_NetworkAdapter" End Sub Private Sub Form_Load()j = 0End Sub Private Sub Sink_OnObjectReady(ByVal objWbemObject As WbemScripting.ISWbemObject, ByVal objWbemAsyncContext As WbemScripting.ISWbemNamedValueSet) Dim Adapter As Variant'Obter todas as informações do adaptador Set Adapter = GetObject("winmgmts:Win32_NetworkAdapterConfiguration=" & j & "") List4.AddItem Adapter.Description If IsNull(Adapter.MACAddress) Then List4.AddItem "Sem endereço MAC" List4.AddItem " " Else List4.AddItem "Mac:" & Adapter.MACAddress List4.AddItem ""Fim se j = j + 1End SubEste artigo é apresentado aqui. Para obter mais informações, você pode consultar este artigo: http://technet.microsoft.com/en-us/library/ee198932.aspx.