Title: External application leaks something ANSI-Corrupting into PowerShell session · Issue #16741 · PowerShell/PowerShell · GitHub
Open Graph Title: External application leaks something ANSI-Corrupting into PowerShell session · Issue #16741 · PowerShell/PowerShell
X Title: External application leaks something ANSI-Corrupting into PowerShell session · Issue #16741 · PowerShell/PowerShell
Description: Prerequisites Write a descriptive title. Make sure you are able to repro it on the latest released version Search the existing issues. Refer to the FAQ. Refer to Differences between Windows PowerShell 5.1 and PowerShell. Steps to reprodu...
Open Graph Description: Prerequisites Write a descriptive title. Make sure you are able to repro it on the latest released version Search the existing issues. Refer to the FAQ. Refer to Differences between Windows PowerSh...
X Description: Prerequisites Write a descriptive title. Make sure you are able to repro it on the latest released version Search the existing issues. Refer to the FAQ. Refer to Differences between Windows PowerSh...
Opengraph URL: https://github.com/PowerShell/PowerShell/issues/16741
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"External application leaks something ANSI-Corrupting into PowerShell session","articleBody":"### Prerequisites\n\n- [X] Write a descriptive title.\n- [X] Make sure you are able to repro it on the [latest released version](https://github.com/PowerShell/PowerShell/releases)\n- [X] Search the existing issues.\n- [X] Refer to the [FAQ](https://github.com/PowerShell/PowerShell/blob/master/docs/FAQ.md).\n- [X] Refer to [Differences between Windows PowerShell 5.1 and PowerShell](https://docs.microsoft.com/powershell/scripting/whats-new/differences-from-windows-powershell).\n\n### Steps to reproduce\n\nI can't find this with a search but that may be searching for the wrong thing.\r\n\r\nI had a task where the most sensible way to compare two lumps of text was with `diff.exe` - I'm using the version which is installed with git for convenience - my script worked in the PowerShell Integrated Console in VSCode, but anywhere else I'd see output like this \r\n` ←[31m Text that should be read ←[0m`\r\n\r\nThat is: **an arrow character was printed where there should be an \"Escape\", and the escape sequence was not processed** \r\n\r\nby a process of trial and error I established \r\n```\r\n\u003c\u003cpath\u003e\u003e\\diff.exe --help ; $y = \"`e[31m Red Text `e[0m\"; $Y\r\n``` \r\nWould output correctly but \r\n```\r\n$x =\u003c\u003cpath\u003e\u003e\\diff.exe --help ; $y = \"`e[31m Red Text `e[0m\"; $Y\r\n``` \r\nWould render escape as arrow, but $y and it would render correctly in a subsequent command . Output is only corrupted while the command that contains diff.exe is running. The same behaviour occurred with `diff.exe \u003c\u003cparams\u003e\u003e | pscmdlet` or `[void](diff.exe \u003c\u003cparams\u003e\u003e)` anything which stopped the main output going to the console. However `git diff` commands don't suffer from the error. `$x = git diff head~1 ; $x = git diff head~1 ;` \r\n\r\n\r\nI found two workarounds \r\n1. run `Cmd.exe \u003c\u003cpath to diff\u003e\u003e \u003c\u003cparams\u003e\u003e \u003e tempfile`\r\n2. Use `Start-Process -wait -WindowStyle Hidden -RedirectStandardOutput $diffOutput -FilePath $PathToDiff -ArgumentList \u003c\u003cparams\u003e\u003e`\r\n\r\nNote that in the start-process example, If `-NoNewWindow` is used instead of `-WindowStyle Hidden` the problem returns\r\n\r\nThe mechanism of the corruption isn't clear but the something seems to bypassing standard output and impact the console for the duration of that command- whether it is possible for PowerShell to trap it is also not clear. \r\nNor is it clear how common this problem is: it's possible that diff does something unique, or there may be dozens of cases waiting to be discovered. As more people are coming to pwsh from the Linux world and wanting to bring tools they know, AND use of ansi formatting is getting less niche and more mainstream those cases will emerge - if they are there \r\n\r\n\r\n\n\n### Expected behavior\n\n```console\n$x =\u003c\u003cpath\u003e\\diff.exe --help ; $y = \"`e[31m Red Text `e[0m\"; $Y\r\n\r\nStores the help from diff in $x, and prints \"Red Text\" in red.\n```\n\n\n### Actual behavior\n\n```console\n$x =\u003c\u003cpath\u003e\\diff.exe --help ; $y = \"`e[31m Red Text `e[0m\"; $Y\r\n\r\nStores the help from diff in $x, and prints \"←[31m Red Text ←[0m\" \r\nHowever if $y is entered as the next command it prints as a red text. (Commands in the same PS1 file behave like commands joined with \";\" )\n```\n\n\n### Error details\n\n```console\nNo errors\n```\n\n\n### Environment data\n\n```powershell\nName Value\u001B[0m\r\n---- -----\u001B[0m\r\nPSVersion 7.2.1\r\nPSEdition Core\r\nGitCommitId 7.2.1\r\nOS Microsoft Windows 10.0.19042\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\n```\n\n\n### Visuals\n\n\r\n","author":{"url":"https://github.com/jhoneill","@type":"Person","name":"jhoneill"},"datePublished":"2022-01-13T11:37:45.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":4},"url":"https://github.com/16741/PowerShell/issues/16741"}
| 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:eabc8946-8dca-0199-822e-ee2bf7a1db5d |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | C45C:1BB425:B3FB50:F05DE0:6A531A17 |
| html-safe-nonce | 291c189d90ae8628e9698982d68de49f12f6f332c454870536a70dbe5d2e1a76 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDNDVDOjFCQjQyNTpCM0ZCNTA6RjA1REUwOjZBNTMxQTE3IiwidmlzaXRvcl9pZCI6IjE3MDc1MjM5OTc1OTg2ODU3MjAiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 458d45a47692303726727cf2be91407766993f90d1d508a39c330fb44bb0e003 |
| hovercard-subject-tag | issue:1101588819 |
| 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/16741/issue_layout |
| twitter:image | https://opengraph.githubassets.com/cb2a0cd1f9f7a1e2f25418093d4049754b2a4d0e134c70cb8070c8bffce14186/PowerShell/PowerShell/issues/16741 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/cb2a0cd1f9f7a1e2f25418093d4049754b2a4d0e134c70cb8070c8bffce14186/PowerShell/PowerShell/issues/16741 |
| og:image:alt | Prerequisites Write a descriptive title. Make sure you are able to repro it on the latest released version Search the existing issues. Refer to the FAQ. Refer to Differences between Windows PowerSh... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | jhoneill |
| hostname | github.com |
| expected-hostname | github.com |
| None | b9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb |
| 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 | 07a982c1d40157c619b364352b704c3ce66bb332 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width