2011-03-16 22 views
5

¿Cómo consulta los espacios de nombres de WMI?¿Cómo consultas los espacios de nombres de WMI?

Así que saber sobre los espacios de nombres WMI porque leí que las salidas y sé que puedo conectar decir:

root\cimv2 

Mi pregunta es ¿y si yo no sabía qué estaban allí los espacios de nombres, ¿cómo me ir a consultar por los espacios de nombres disponibles?

Simplemente quiero explorar el WMI y no tener que buscar cada espacio de nombre.

Estoy usando WBEMtest, pero tomaré cualquier cosa, .NET, winapi.h, ¿qué tienes?

Respuesta

3

Para enumerar todos los espacios de nombres, primero debe conectarse al espacio de nombres root, consultar todas las instancias __NAMESPACE y repetir repetitivamente este proceso para cada instancia.

verificación de estas muestras

Delphi

procedure GetListWMINameSpaces(const RootNameSpace:String;const List :TStrings;ReportException:Boolean=True);//recursive function 
var 
    objSWbemLocator : OleVariant; 
    objWMIService : OleVariant; 
    colItems  : OLEVariant; 
    colItem   : OLEVariant; 
    oEnum   : IEnumvariant; 
    iValue   : LongWord; 
    sValue   : string; 
begin 
try 
    objSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator'); 
    objWMIService := objSWbemLocator.ConnectServer(wbemLocalhost, RootNameSpace, '', ''); 
    colItems  := objWMIService.InstancesOf('__NAMESPACE'); 
    oEnum   := IUnknown(colItems._NewEnum) as IEnumVariant; 
    while oEnum.Next(1, colItem, iValue) = 0 do 
    begin 
    sValue:=VarStrNull(colItem.Name); 
    colItem:=Unassigned; 
    List.Add(RootNameSpace+'\'+sValue); 
    GetListWMINameSpaces(RootNameSpace+'\'+sValue,List);//recursive 
    end; 
except 
    if ReportException then 
    raise; 
end; 
end; 

VbScript

strComputer = "." 
Call EnumNameSpaces("root") 

Sub EnumNameSpaces(strNameSpace) 
    WScript.Echo strNameSpace 
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & _ 
     "\" & strNameSpace) 
    Set colNameSpaces = objWMIService.InstancesOf("__NAMESPACE") 
    For Each objNameSpace In colNameSpaces 
     Call EnumNameSpaces(strNameSpace & "\" & objNameSpace.Name) 
    Next 
End Sub 
10

entiendo que tienes tu respuesta, pero quería mostrar lo fácil que es en PowerShell para obtener una lista de espacios de nombres:

Get-WMIObject -namespace "root" -class "__Namespace" | Select Name 
1

para listar todos los valores de la propiedad espacio de nombres Name para todos los espacios de nombres (root) para un servidor llamado servidor en C# (en LINQPad):

ManagementClass nsClass = 
    new ManagementClass(
     new ManagementScope(@"\\server\root"), 
     new ManagementPath("__namespace"), 
     null); 

foreach(ManagementObject ns in nsClass.GetInstances()) 
{ 
    ns["Name"].Dump(); 
} 

Tenga en cuenta que el método Dump simplemente da salida a un valor ; Si no está utilizando LINQPad, querrá hacer otra cosa con el valor de la propiedad Name.

1

Para Python (con las extensiones necesarias WMI y pywin32 instaladas):

import wmi 
c = wmi.WMI (moniker='//./root') 
wql = "SELECT * FROM __NAMESPACE" 

for __NAMESPACE in c.query(wql): 
    print __NAMESPACE.Name 
0

Uso Get-CimInstance -Query "SELECT * FROM __NAMESPACE" -Namespace "root" de PowerShell.

Esto también funciona para Windows Nano servidor

0

Puede utilizar VBScript para obtener toda Namespaces de root.

Aquí está el script de ejemplo

On Error Resume Next 
strComputer = "." 
Wscript.Echo "-----------------------------------" 
Wscript.Echo "Namespaces" 
Wscript.Echo "-----------------------------------" 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root") 
Set colItems = objWMIService.ExecQuery(_ 
    "SELECT * FROM __NAMESPACE",,48) 
For Each objItem in colItems 
    Wscript.Echo "Name: " & objItem.Name 
Next 

Resultados previstos

Microsoft (R) Windows Script Host Version 5.8 
Copyright (C) Microsoft Corporation. All rights reserved. 

----------------------------------- 
Namespaces 
----------------------------------- 
Name: subscription 
Name: DEFAULT 
Name: MicrosoftWmiNet 
Name: CIMV2 
Name: Cli 
Name: nap 
Name: MicrosoftIISv2 
Name: SECURITY 
Name: SecurityCenter2 
Name: RSOP 
Name: WebAdministration 
Name: WMI 
Name: OpenHardwareMonitor 
Name: directory 
Name: Policy 
Name: Interop 
Name: ServiceModel 
Name: SecurityCenter 
Name: Microsoft 
Name: aspnet 
Cuestiones relacionadas