inspec/lib/resources/vbscript.rb
Miah Johnson 7b23fa479c Add correct supports platform to resources. (#2674)
* Add correct `supports platform` to resources.

Signed-off-by: Miah Johnson <miah@chia-pet.org>

* Remove 'os_family' and update platforms to specify what they did.

Signed-off-by: Miah Johnson <miah@chia-pet.org>

* Add esx and cisco to generic resources.

Signed-off-by: Jared Quick <jquick@chef.io>
2018-02-19 15:26:49 +01:00

69 lines
1.9 KiB
Ruby

# encoding: utf-8
require 'securerandom'
module Inspec::Resources
# This resource allows users to run vbscript on windows machines. We decided
# not to use scriptcontrol, due to the fact that it works on 32 bit systems only:
# $script = new-object -comobject MSScriptControl.ScriptControl
# $script.language = "vbscript"
# $script.ExecuteStatement($Cmd)
#
# For that reason, we call csript.exe directy with the script. Vbscript is
# embedded in Powershell to ease the file transfer and reuse powershell
# encodedCommand since train does not allow file upload yet.
#
# We run cscript with /nologo option to get the expected output only with the
# version information.
#
# Since Windows does not delete tmp files automatically, we remove the VBScript
# after we executed it
# @see https://msdn.microsoft.com/en-us/library/aa364991.aspx
class VBScript < PowershellScript
name 'vbscript'
supports platform: 'windows'
desc ''
example "
script = <<-EOH
# you vbscript
EOH
describe vbscript(script) do
its('stdout') { should eq 'output' }
end
"
def initialize(vbscript)
return skip_resource 'The `vbscript` resource is not supported on your OS yet.' unless inspec.os.windows?
@seperator = SecureRandom.uuid
cmd = <<~EOH
$vbscript = @"
#{vbscript}
Wscript.Stdout.Write "#{@seperator}"
"@
$filename = [System.IO.Path]::GetTempFileName() + ".vbs"
New-Item $filename -type file -force -value $vbscript | Out-Null
cscript.exe /nologo $filename
Remove-Item $filename | Out-Null
EOH
super(cmd)
end
def result
@result ||= parse_stdout
end
def to_s
'Windows VBScript'
end
private
def parse_stdout
res = inspec.backend.run_command(@command)
parsed_result = res.stdout.gsub(/#{@seperator}\r\n$/, '')
res.stdout = parsed_result
res
end
end
end