From 333bc26d82370e2f5d324c1a24e7885fde4b9657 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Tue, 4 Feb 2025 17:22:09 +0900 Subject: [PATCH] Added get_item_property and use it for Win32::Registry and Get-ItemProperty --- ext/win32/lib/win32/resolv.rb | 76 +++++++++-------------------------- 1 file changed, 19 insertions(+), 57 deletions(-) diff --git a/ext/win32/lib/win32/resolv.rb b/ext/win32/lib/win32/resolv.rb index bf19ef79e2..0ea09ba82e 100644 --- a/ext/win32/lib/win32/resolv.rb +++ b/ext/win32/lib/win32/resolv.rb @@ -82,47 +82,16 @@ module Win32 search = nil nameserver = get_dns_server_list - slist = if defined?(Win32::Registry) - Registry::HKEY_LOCAL_MACHINE.open(TCPIP_NT) do |reg| - reg.read_s('SearchList') - rescue Registry::Error - "" - end - else - cmd = "Get-ItemProperty -Path 'HKLM:\\#{TCPIP_NT}' -Name 'SearchList' -ErrorAction SilentlyContinue | Select-Object -ExpandProperty SearchList" - output, _ = Open3.capture2('powershell', '-Command', cmd) - output.strip - end + slist = get_item_property(TCPIP_NT, 'SearchList') search = slist.split(/,\s*/) unless slist.empty? if add_search = search.nil? search = [] - nvdom = if defined?(Win32::Registry) - Registry::HKEY_LOCAL_MACHINE.open(TCPIP_NT) do |reg| - reg.read_s('NV Domain') - rescue Registry::Error - "" - end - else - cmd = "Get-ItemProperty -Path 'HKLM:\\#{TCPIP_NT}' -Name 'NV Domain' -ErrorAction SilentlyContinue | Select-Object -ExpandProperty NV domain" - output, _ = Open3.capture2('powershell', '-Command', cmd) - output.strip - end + nvdom = get_item_property(TCPIP_NT, 'NV Domain') unless nvdom.empty? @search = [ nvdom ] - udmnd = if defined?(Win32::Registry) - Registry::HKEY_LOCAL_MACHINE.open(TCPIP_NT) do |reg| - reg.read_i('UseDomainNameDevolution') - rescue Registry::Error - 0 - end - else - cmd = "Get-ItemProperty -Path 'HKLM:\\#{TCPIP_NT}' -Name 'UseDomainNameDevolution' -ErrorAction SilentlyContinue | Select-Object -ExpandProperty UseDomainNameDevolution" - output, _ = Open3.capture2('powershell', '-Command', cmd) - output.strip.to_i - end - + udmnd = get_item_property(TCPIP_NT, 'UseDomainNameDevolution').to_i if udmnd != 0 if /^\w+\./ =~ nvdom devo = $' @@ -131,7 +100,6 @@ module Win32 end end - ifs = if defined?(Win32::Registry) Registry::HKEY_LOCAL_MACHINE.open(TCPIP_NT + '\Interfaces') do |reg| reg.keys @@ -146,17 +114,7 @@ module Win32 ifs.each do |iface| next unless ns = %w[NameServer DhcpNameServer].find do |key| - ns = if defined?(Win32::Registry) - Registry::HKEY_LOCAL_MACHINE.open(TCPIP_NT + '\Interfaces' + "\\#{iface}" ) do |regif| - regif.read_s(key) - rescue Registry::Error - "" - end - else - cmd = "Get-ItemProperty -Path 'HKLM:\\#{TCPIP_NT}' -Name '#{key}' -ErrorAction SilentlyContinue | Select-Object -ExpandProperty #{key}" - output, _ = Open3.capture2('powershell', '-Command', cmd) - output.strip - end + ns = get_item_property(TCPIP_NT + '\Interfaces' + "\\#{iface}", key) break ns.split(/[,\s]\s*/) unless ns.empty? end @@ -164,17 +122,7 @@ module Win32 if add_search [ 'Domain', 'DhcpDomain' ].each do |key| - dom = if defined?(Win32::Registry) - Registry::HKEY_LOCAL_MACHINE.open(TCPIP_NT + '\Interfaces' + "\\#{iface}" ) do |regif| - regif.read_s(key) - rescue Registry::Error - "" - end - else - cmd = "Get-ItemProperty -Path 'HKLM:\\#{TCPIP_NT}' -Name '#{key}' -ErrorAction SilentlyContinue | Select-Object -ExpandProperty #{key}" - output, _ = Open3.capture2('powershell', '-Command', cmd) - output.strip - end + dom = get_item_property(TCPIP_NT + '\Interfaces' + "\\#{iface}", key) unless dom.empty? search.concat(dom.split(/,\s*/)) break @@ -185,6 +133,20 @@ module Win32 search << devo if add_search and devo [ search.uniq, nameserver.uniq ] end + + def get_item_property(path, name) + if defined?(Win32::Registry) + Registry::HKEY_LOCAL_MACHINE.open(path) do |reg| + reg.read_s(key) + rescue Registry::Error + "" + end + else + cmd = "Get-ItemProperty -Path 'HKLM:\\#{path}' -Name '#{name}' -ErrorAction SilentlyContinue | Select-Object -ExpandProperty #{name}" + output, _ = Open3.capture2('powershell', '-Command', cmd) + output.strip + end + end end end end