# encoding: UTF-8 describe 'winrm client powershell', integration: true do before(:all) do @winrm = winrm_connection end describe 'empty string' do subject(:output) { @winrm.powershell('') } it { should have_exit_code 4_294_770_688 } it { should have_stderr_match(/Cannot process the command because of a missing parameter/) } end describe 'ipconfig' do subject(:output) { @winrm.powershell('ipconfig') } it { should have_exit_code 0 } it { should have_stdout_match(/Windows IP Configuration/) } it { should have_no_stderr } end describe 'echo \'hello world\' using apostrophes' do subject(:output) { @winrm.powershell("echo 'hello world'") } it { should have_exit_code 0 } it { should have_stdout_match(/hello world/) } it { should have_no_stderr } end describe 'dir with incorrect argument /z' do subject(:output) { @winrm.powershell('dir /z') } it { should have_exit_code 1 } it { should have_no_stdout } end describe 'Math area calculation' do subject(:output) do @winrm.powershell(<<-EOH $diameter = 4.5 $area = [Math]::pow([Math]::PI * ($diameter/2), 2) Write-Host $area EOH ) end it { should have_exit_code 0 } it { should have_stdout_match(/49.9648722805149/) } it { should have_no_stderr } end describe 'ipconfig with a block' do subject(:stdout) do outvar = '' @winrm.powershell('ipconfig') do |stdout, _stderr| outvar << stdout end outvar end it { should match(/Windows IP Configuration/) } end describe 'capturing output from Write-Host and Write-Error' do subject(:output) do script = <<-eos Write-Host 'Hello' $host.ui.WriteErrorLine(', world!') eos @captured_stdout, @captured_stderr = '', '' @winrm.powershell(script) do |stdout, stderr| @captured_stdout << stdout if stdout @captured_stderr << stderr if stderr end end it 'should have stdout' do expect(output.stdout).to eq("Hello\n") expect(output.stdout).to eq(@captured_stdout) end it 'should have stderr' do # TODO: Option to parse CLIXML # expect(output.output).to eq("Hello\n, world!") # expect(output.stderr).to eq(", world!") expect(output.stderr).to eq( "#< CLIXML\r\n" \ ", world!_x000D__x000A_") expect(output.stderr).to eq(@captured_stderr) end it 'should have output' do # TODO: Option to parse CLIXML # expect(output.output).to eq("Hello\n, world!") expect(output.output).to eq("Hello\n#< CLIXML\r\n" \ ", world!_x000D__x000A_") end end end