Title: S.M.A.PowerShell.HadErrors and $? return false positives when errors are suppressed · Issue #4613 · PowerShell/PowerShell · GitHub
Open Graph Title: S.M.A.PowerShell.HadErrors and $? return false positives when errors are suppressed · Issue #4613 · PowerShell/PowerShell
X Title: S.M.A.PowerShell.HadErrors and $? return false positives when errors are suppressed · Issue #4613 · PowerShell/PowerShell
Description: Created from discussion started on #3768. Description If you invoke PowerShell using the System.Management.Automation.PowerShell class, and if you handle the errors in the command you invoke by indicating that they should be ignored, S.M...
Open Graph Description: Created from discussion started on #3768. Description If you invoke PowerShell using the System.Management.Automation.PowerShell class, and if you handle the errors in the command you invoke by ind...
X Description: Created from discussion started on #3768. Description If you invoke PowerShell using the System.Management.Automation.PowerShell class, and if you handle the errors in the command you invoke by ind...
Opengraph URL: https://github.com/PowerShell/PowerShell/issues/4613
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"S.M.A.PowerShell.HadErrors and $? return false positives when errors are suppressed","articleBody":"Created from discussion started on #3768.\r\n\r\nDescription\r\n---\r\nIf you invoke PowerShell using the System.Management.Automation.PowerShell class, and if you handle the errors in the command you invoke by indicating that they should be ignored, S.M.A.PowerShell will still set HadErrors to true. Below are some code samples illustrating the problem.\r\n\r\nSample 1: C#/.NET invocation of PowerShell commands/scripts\r\n---\r\n```PowerShell\r\n$ps = [PowerShell]::Create()\r\n$ps.AddCommand('Get-Service').AddParameter('Name','Invalid').AddParameter('ErrorAction',[System.Management.Automation.ActionPreference]::Ignore) \u003e $null\r\n$ps.Invoke()\r\n$ps.HadErrors # returns $true; expectation is that this would return false since the command was configured to ignore errors\r\n```\r\n\r\nSample 1: Expected behavior\r\n---\r\n$ps.HadErrors should return $false\r\n\r\nSample 1: Actual behavior\r\n---\r\n$ps.HadErrors returns $true, even when $ps.Streams.Error does not contain any errors (because there were no errors!)\r\n\r\nSample 2: Direct command invocation in PowerShell\r\n---\r\n```PowerShell\r\nGet-Service -Name Invalid -ErrorAction Ignore\r\n$? # returns $false; shouldn't this return $true?\r\n```\r\n\r\nSample 2: Expected behavior\r\n---\r\n$? should return $true\r\n\r\nSample 2: Actual behavior\r\n---\r\n$? returns $false, even though there were no errors because the invoker of the command instructed PowerShell to ignore the error that would otherwise have been raised because it is a benign error for them (and therefore, not an error)\r\n\r\nAdditional Details\r\n---\r\nIn both of these cases, -ErrorAction Ignore is being used to tell PowerShell that the error is actually not an error as far as this invocation is concerned, and therefore it can be completely ignored. Why then, do both $? and $ps.HadErrors indicate there was still error? Technically there was an error, by definition of the command being invoked, but it is being handled/treated like it is not an error in the command from which the command producing the error was invoked. In both of these cases $? and $ps.HadErrors should have values indicating that there wasn't an error. If you do not trust the command you are invoking to ignore benign errors and only notify you about errors that you actually need to care about then you should not be invoking that command.\r\n\r\nEnvironment data\r\n---\r\n```powershell\r\nPS C:\\\u003e $PSVersionTable\r\nName Value\r\n---- -----\r\nPSVersion 6.0.0-beta\r\nPSEdition Core\r\nGitCommitId v6.0.0-beta.5\r\nOS Microsoft Windows 10.0.16251\r\nPlatform Win32NT\r\nPSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}\r\nPSRemotingProtocolVersion 2.3\r\nSerializationVersion 1.1.0.1\r\nWSManStackVersion 3.0\r\n```","author":{"url":"https://github.com/KirkMunro","@type":"Person","name":"KirkMunro"},"datePublished":"2017-08-18T14:30:35.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":22},"url":"https://github.com/4613/PowerShell/issues/4613"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:2c43e7a9-25f7-05d3-1175-0d0d03188eb7 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | EA1A:2F98EE:14AE298:1ABC39B:6A5C49AC |
| html-safe-nonce | 8018e56d561d55e05244e9b54df6afc6f27fd1e3c5591ea35153addf2bd91dcb |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFQTFBOjJGOThFRToxNEFFMjk4OjFBQkMzOUI6NkE1QzQ5QUMiLCJ2aXNpdG9yX2lkIjoiODA3MDE5NjUxNjc4MTU3NDU3MyIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 23b5691056050920e8f78891139a52b0c1266245c28e1ad8688bda1a71cfdebe |
| hovercard-subject-tag | issue:251263112 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/PowerShell/PowerShell/4613/issue_layout |
| twitter:image | https://opengraph.githubassets.com/7b1cbb0e6087aaa34c574873ddc2a1367f9cbb3e0996da06d8dc2051f7bc7441/PowerShell/PowerShell/issues/4613 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/7b1cbb0e6087aaa34c574873ddc2a1367f9cbb3e0996da06d8dc2051f7bc7441/PowerShell/PowerShell/issues/4613 |
| og:image:alt | Created from discussion started on #3768. Description If you invoke PowerShell using the System.Management.Automation.PowerShell class, and if you handle the errors in the command you invoke by ind... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | KirkMunro |
| hostname | github.com |
| expected-hostname | github.com |
| None | 5290d7e14309ad1e76106a9c4237bd1041517e83ea182c8ab756752cb0c6940b |
| turbo-cache-control | no-preview |
| go-import | github.com/PowerShell/PowerShell git https://github.com/PowerShell/PowerShell.git |
| octolytics-dimension-user_id | 11524380 |
| octolytics-dimension-user_login | PowerShell |
| octolytics-dimension-repository_id | 49609581 |
| octolytics-dimension-repository_nwo | PowerShell/PowerShell |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 49609581 |
| octolytics-dimension-repository_network_root_nwo | PowerShell/PowerShell |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 9c975978430e9ad293956f2bbdaf153b1bd84a99 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width