diff options
Diffstat (limited to 'lib/wmi-lite/wmi.rb')
-rw-r--r-- | lib/wmi-lite/wmi.rb | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/lib/wmi-lite/wmi.rb b/lib/wmi-lite/wmi.rb index cc6492d..b712ba9 100644 --- a/lib/wmi-lite/wmi.rb +++ b/lib/wmi-lite/wmi.rb @@ -18,32 +18,25 @@ require 'win32ole' if RUBY_PLATFORM =~ /mswin|mingw32|windows/ require 'wmi-lite/wmi_instance' +require 'wmi-lite/wmi_exception' module WmiLite class Wmi def initialize(namespace = nil) - @namespace = namespace + @namespace = namespace.nil? ? 'root/cimv2' : namespace @connection = nil end def query(wql_query) - results = start_query(wql_query) - - result_set = [] - - results.each do | result | - result_set.push(wmi_result_to_snapshot(result)) - end - - result_set + query_with_context(wql_query) end def instances_of(wmi_class) - query("select * from #{wmi_class}") + query_with_context("select * from #{wmi_class}", wmi_class) end def first_of(wmi_class) - query_result = start_query("select * from #{wmi_class}") + query_result = start_query("select * from #{wmi_class}", wmi_class) first_result = nil query_result.each do | record | first_result = record @@ -54,10 +47,27 @@ module WmiLite private - def start_query(wql_query) - connect_to_namespace - result = @connection.ExecQuery(wql_query) - raise_if_failed(result) + 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 + + def start_query(wql_query, diagnostic_class_name = nil) + result = nil + begin + connect_to_namespace + result = @connection.ExecQuery(wql_query) + raise_if_failed(result) + rescue WIN32OLERuntimeError => native_exception + raise WmiException.new(native_exception, @namespace, wql_query, diagnostic_class_name) + end result end |