class Inspec::Resources::WindowsTasks

Public Class Methods

new(taskuri) click to toggle source
# File lib/inspec/resources/windows_task.rb, line 29
def initialize(taskuri)
  @taskuri = taskuri
  @cache = nil
end

Public Instance Methods

disabled?() click to toggle source
# File lib/inspec/resources/windows_task.rb, line 47
def disabled?
  return false if info.nil? || info[:state].nil?

  info[:scheduled_task_state] == "Disabled" || info[:state] == "Disabled"
end
enabled?() click to toggle source

rubocop:disable Style/WordArray

# File lib/inspec/resources/windows_task.rb, line 41
def enabled?
  return false if info.nil? || info[:state].nil?

  ["Ready", "Running"].include?(info[:state])
end
exists?() click to toggle source
# File lib/inspec/resources/windows_task.rb, line 34
def exists?
  return true unless info.nil? || info[:uri].nil?

  false
end
info() click to toggle source
# File lib/inspec/resources/windows_task.rb, line 73
def info
  return @cache unless @cache.nil?

  # PowerShell v5 has Get-ScheduledTask cmdlet,
  # _using something with backward support to v3_
  # script = "Get-ScheduledTask | ? { $_.URI -eq '#{@taskuri}' } | Select-Object URI,@{N='State';E={$_.State.ToString()}} | ConvertTo-Json"

  # Using schtasks as suggested by @modille but aligning property names to match cmdlet to future proof.
  script = "schtasks /query /v /fo csv /tn '#{@taskuri}' | ConvertFrom-Csv | Select @{N='URI';E={$_.TaskName}},@{N='State';E={$_.Status.ToString()}},'Logon Mode','Last Result','Task To Run','Run As User','Scheduled Task State' | ConvertTo-Json -Compress"

  cmd = inspec.powershell(script)

  begin
    params = JSON.parse(cmd.stdout)
  rescue JSON::ParserError => _e
    return nil
  end

  # If multiple triggers are defined, `schtasks` returns a list.
  # This merges that list with the latest item taking precedence.
  # This is the same behavior as `Get-ScheduledTask`.
  params = params.reduce(:merge) if params.is_a?(Array)

  @cache = {
    uri: params["URI"],
    state: params["State"],
    logon_mode: params["Logon Mode"],
    last_result: params["Last Result"],
    task_to_run: params["Task To Run"],
    run_as_user: params["Run As User"],
    scheduled_task_state: params["Scheduled Task State"],
    type: "windows-task",
  }
end
last_result() click to toggle source
# File lib/inspec/resources/windows_task.rb, line 57
def last_result
  info[:last_result]
end
logon_mode() click to toggle source
# File lib/inspec/resources/windows_task.rb, line 53
def logon_mode
  info[:logon_mode]
end
run_as_user() click to toggle source
# File lib/inspec/resources/windows_task.rb, line 65
def run_as_user
  info[:run_as_user]
end
task_to_run() click to toggle source
# File lib/inspec/resources/windows_task.rb, line 61
def task_to_run
  info[:task_to_run].to_s.strip
end
to_s() click to toggle source
# File lib/inspec/resources/windows_task.rb, line 108
def to_s
  "Windows Task '#{@taskuri}'"
end
type() click to toggle source
# File lib/inspec/resources/windows_task.rb, line 69
def type
  info[:type] unless info.nil?
end