In this case I wouldn’t blame WinRM – the knife plugin really should return the exit code.
You can definitely get a true / false status of a remotely executed command, though the process exit code for non-powershell cmdlets is tricker. For example, $? is $true in the first success case below, $false in the second:
Invoke-command {echo hi} # $? == $true Invoke-command {throw ‘sad’} # $? == $false
Throwing an exception will cause invoke command to set $? to $false. Since cmdlets only return $true or $false as an exit status, that’s as good as it gets.
If you want to translate that into a process exit code, you can add logic to your script to check $LASTEXITCODE. If you just want a failure status, you can throw an exception. If you’d like the actual code, you’ll need to do as suggested below – parse it, possibly by encoding all script output as xml or json, or simply emitting the exit code as the last line of your script.
Regarding the original issue, I would expect knife winrm to return a nonzero exit code if the command it is executing fails.
-Adam
WinRM is… special. Ok, that’s being too nice. It’s an abomination, but it’s all we have on Windows unless you want to install an SSH daemon. There is not, as far as I can tell, any way to get the exit code of a process called via WinRM. Your best bet is to parse the output, unless someone else knows of something that I have overlooked.
Larry Wright
On Feb 10, 2014, at 9:17 AM, Brian Anderson < "> > wrote:
|
Archive powered by MHonArc 2.6.16.