Welcome › Forums › General PowerShell Q&A › How do I capture errors and assign to variable?
This topic contains 6 replies, has 4 voices, and was last updated by
-
AuthorPosts
-
April 25, 2014 at 10:36 am #14839
Hello,
Response from Receive-Job contains some errors and I want to capture those in variable for some reason those are missing from variable but do output to screen when required. Example is below. I'd like $resp variable to contain error message as well, not only "Server1 processing finished"
PS C:\Users\admin>> $Sender | Receive-Job -Keep
The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
+ CategoryInfo : InvalidOperation: (:) [Get-WmiObject], COMException
+ FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
+ PSComputerName : localhostServer1 Processing finished
PS C:\Users\admin>> $resp = ($Sender | Receive-Job -Keep)
The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
+ CategoryInfo : InvalidOperation: (:) [Get-WmiObject], COMException
+ FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
+ PSComputerName : localhostPS C:\Users\admin>> $resp
Server1 Processing finished -
April 25, 2014 at 10:41 am #14840
use Get-Job to get the job object, and pipe it to Get-Member. You should see properties of the job object that provide access to the various pipelines.
Keep in mind that in PowerShell, error messages are never part of the "main" output – and Remoting only captures the "main" output. Errors, warnings, and so on have their own pipelines, or channels. They're not always capturable with Remoting.
-
April 25, 2014 at 10:57 am #14842
Thanks.
For anybody having the same issue following will capture error stream as well($Sender | Receive-Job 2>&1)
-
April 25, 2014 at 11:03 am #14843
And just to clarify what that's doing: It's taking the error pipeline (#2) and redirecting it into the main output pipeline (#1), mingling the two.
-
April 25, 2014 at 1:52 pm #14848
For some reason does not work for me
PS C:\Users\admin>> Receive-Job 661 -Keep -ErrorVariable $RemoteErr
The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
+ CategoryInfo : InvalidOperation: (:) [Get-WmiObject], COMException
+ FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
+ PSComputerName : localhostServer1 finished
PS C:\Users\gsuvalian>> $RemoteErr -eq $null
True -
April 25, 2014 at 1:34 pm #14846
ErrorVariable and ErrorAction seem to work with Receive-Job just like any other cmdlet (though this test was running a local job, not remote. I don't have another computer up on my home network at the moment for a full test.)
$job = Start-Job -ScriptBlock { Write-Error "This is an error."; Write-Output "This is output." } $null = $job | Wait-Job $output = $job | Receive-Job -Keep -ErrorAction SilentlyContinue -ErrorVariable remoteErrors $remoteErrors.Count $remoteErrors[0]
-
April 27, 2014 at 3:03 pm #14857
You should remove the '$' character from the '-ErrorVariable' parameter. Your code should probably be:
Receive-Job -ID 661 -Keep -ErrorVariable RemoteErr $RemoteErr -eq $null
You can read more about it if you run
Get-Help about_CommonParameters
-
AuthorPosts
The topic ‘How do I capture errors and assign to variable?’ is closed to new replies.