docs: def get_settings(profile, section, store='local'):
      '''
      Get the firewall property from the specified profile in the specified store
      as returned by ``netsh advfirewall``.
  
      Args:
  
          profile (str):
              The firewall profile to query. Valid options are:
  
              - domain
              - public
              - private
  
          section (str):
              The property to query within the selected profile. Valid options
              are:
  
              - firewallpolicy : inbound/outbound behavior
              - logging : firewall logging settings
              - settings : firewall properties
              - state : firewalls state (on | off)
  
          store (str):
              The store to use. This is either the local firewall policy or the
              policy defined by local group policy. Valid options are:
  
              - lgpo
              - local
  
              Default is ``local``
  
      Returns:
          dict: A dictionary containing the properties for the specified profile
  
      Raises:
          CommandExecutionError: If an error occurs
          ValueError: If the parameters are incorrect
      '''
      # validate input
      if profile.lower() not in ('domain', 'public', 'private'):
          raise ValueError('Incorrect profile: {0}'.format(profile))
      if section.lower() not in ('state', 'firewallpolicy', 'settings', 'logging'):
          raise ValueError('Incorrect section: {0}'.format(section))
      if store.lower() not in ('local', 'lgpo'):
          raise ValueError('Incorrect store: {0}'.format(store))
      command = 'show {0}profile {1}'.format(profile, section)
      # run it
      results = _netsh_command(command=command, store=store)
      # sample output:
      # Domain Profile Settings:
      # ----------------------------------------------------------------------
      # LocalFirewallRules                    N/A (GPO-store only)
      # LocalConSecRules                      N/A (GPO-store only)
      # InboundUserNotification               Disable
      # RemoteManagement                      Disable
      # UnicastResponseToMulticast            Enable
  
      # if it's less than 3 lines it failed
      if len(results) < 3:
          raise CommandExecutionError('Invalid results: {0}'.format(results))
      ret = {}
      # Skip the first 2 lines. Add everything else to a dictionary
      for line in results[3:]:
          ret.update(dict(list(zip(*[iter(re.split(r"\s{2,}", line))]*2))))
  
      # Remove spaces from the values so that `Not Configured` is detected
      # correctly
      for item in ret:
          ret[item] = ret[item].replace(' ', '')
  
      # special handling for firewallpolicy
      if section == 'firewallpolicy':
          inbound, outbound = ret['Firewall Policy'].split(',')
          return {'Inbound': inbound, 'Outbound': outbound}
  
      return ret