Class: Inspec::Resources::WindowsInterface

Inherits:
InterfaceInfo show all
Defined in:
lib/resources/interface.rb

Instance Attribute Summary

Attributes inherited from InterfaceInfo

#inspec

Instance Method Summary collapse

Methods inherited from InterfaceInfo

#initialize

Methods included from Converter

#convert_to_i

Constructor Details

This class inherits a constructor from Inspec::Resources::InterfaceInfo

Instance Method Details

#interface_info(iface) ⇒ Object



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/resources/interface.rb', line 99

def interface_info(iface)
  # gather all network interfaces
  cmd = inspec.command('Get-NetAdapter | Select-Object -Property Name, InterfaceDescription, Status, State, MacAddress, LinkSpeed, ReceiveLinkSpeed, TransmitLinkSpeed, Virtual | ConvertTo-Json')

  # filter network interface
  begin
    net_adapter = JSON.parse(cmd.stdout)
  rescue JSON::ParserError => _e
    return nil
  end

  # ensure we have an array of groups
  net_adapter = [net_adapter] if !net_adapter.is_a?(Array)

  # select the requested interface
  adapters = net_adapter.each_with_object([]) do |adapter, adapter_collection|
    # map object
    info = {
      name: adapter['Name'],
      up: adapter['State'] == 2,
      speed: adapter['ReceiveLinkSpeed'] / 1000,
    }
    adapter_collection.push(info) if info[:name].casecmp(iface) == 0
  end

  return nil if adapters.empty?
  warn "[Possible Error] detected multiple network interfaces with the name #{iface}" if adapters.size > 1
  adapters[0]
end