diff options
author | Adam Edwards <adamed@opscode.com> | 2014-05-17 06:48:53 -0700 |
---|---|---|
committer | Adam Edwards <adamed@opscode.com> | 2014-05-17 06:48:53 -0700 |
commit | cabc5171e3d65b9a9a9831a0a07588f20c90c3e7 (patch) | |
tree | 476f8dca1941ffa239f1b0ba97a6238080f4b56f /lib/wmi-lite/wmi.rb | |
parent | 9902fd92d533c30ffc167177826e61de122800e0 (diff) | |
download | wmi-lite-cabc5171e3d65b9a9a9831a0a07588f20c90c3e7.tar.gz |
More specific error handling
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 |