class WmiLite::Wmi

Public Class Methods

new(namespace = nil) click to toggle source
# File lib/wmi-lite/wmi.rb, line 25
def initialize(namespace = nil)
  @namespace = namespace.nil? ? "root/cimv2" : namespace
  @connection = nil
end

Public Instance Methods

first_of(wmi_class) click to toggle source
# File lib/wmi-lite/wmi.rb, line 38
def first_of(wmi_class)
  query_result = start_query("select * from #{wmi_class}", wmi_class)
  first_result = nil
  query_result.each do |record|
    first_result = record
    break
  end
  first_result.nil? ? nil : wmi_result_to_snapshot(first_result)
end
instances_of(wmi_class) click to toggle source
# File lib/wmi-lite/wmi.rb, line 34
def instances_of(wmi_class)
  query_with_context("select * from #{wmi_class}", wmi_class)
end
query(wql_query) click to toggle source
# File lib/wmi-lite/wmi.rb, line 30
def query(wql_query)
  query_with_context(wql_query)
end

Private Instance Methods

connect_to_namespace() click to toggle source
# File lib/wmi-lite/wmi.rb, line 81
def connect_to_namespace
  if @connection.nil?
    namespace = @namespace.nil? ? "root/cimv2" : @namespace
    locator = WIN32OLE.new("WbemScripting.SWbemLocator")
    begin
      @connection = locator.ConnectServer(".", namespace)
    rescue WIN32OLERuntimeError => native_exception
      raise WmiException.new(native_exception, :ConnectServer, @namespace)
    end
  end
end
query_with_context(wql_query, diagnostic_class_name = nil) click to toggle source
# File lib/wmi-lite/wmi.rb, line 50
def query_with_context(wql_query, diagnostic_class_name = nil)
  results = start_query(wql_query, diagnostic_class_name)

  result_set = []

  results.each do |result|
    result_set.push(wmi_result_to_snapshot(result))
  end

  result_set
end
raise_if_failed(result) click to toggle source
# File lib/wmi-lite/wmi.rb, line 74
def raise_if_failed(result)
  # Attempting to access the count property of the underlying
  # COM (OLE) object will trigger an exception if the query
  # was unsuccessful.
  result.count
end
start_query(wql_query, diagnostic_class_name = nil) click to toggle source
# File lib/wmi-lite/wmi.rb, line 62
def start_query(wql_query, diagnostic_class_name = nil)
  result = nil
  connect_to_namespace
  begin
    result = @connection.ExecQuery(wql_query)
    raise_if_failed(result)
  rescue WIN32OLERuntimeError => native_exception
    raise WmiException.new(native_exception, :ExecQuery, @namespace, wql_query, diagnostic_class_name)
  end
  result
end
wmi_result_to_snapshot(wmi_object) click to toggle source
# File lib/wmi-lite/wmi.rb, line 93
def wmi_result_to_snapshot(wmi_object)
  snapshot = Instance.new(wmi_object)
end