Vscode-powershell: Errors in Integrated Console when invoking some native applications (PSHostRawUserInterface)

Created on 24 Jul 2017  路  10Comments  路  Source: PowerShell/vscode-powershell

System Details

  • Operating system name and version: Windows 10 Insider 16232
  • VS Code version: 1.14.1
  • PowerShell extension version: 1.4.1
  • Output from $PSVersionTable:
    Name Value
    ---- -----
    PSVersion 5.1.16232.1000
    PSEdition Desktop
    PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
    BuildVersion 10.0.16232.1000
    CLRVersion 4.0.30319.42000
    WSManStackVersion 3.0
    PSRemotingProtocolVersion 2.3
    SerializationVersion 1.1.0.1
Copy / paste the below commands into the PowerShell Integrated Terminal, and paste the output here

code -v
$pseditor.EditorServicesVersion
code --list-extensions --show-versions
$PSVersionTable

Issue Description

In VSCode Integrated Terminal when using "Start-Transcript", external commands (e.g. git.exe/ipconfig/nbtstat/etc/etc/etc) run as expected, but on completion a spurious error message is displayed.

This occurs if Start-Transcript is entered manually into the integrated console or if Start-Transcript is included in Profile.ps1. The error does not occur if transcripts are not being collected (or if Stop-Transcript is used).

The issue only occurs with external (.exe/.com etc) commands. Cmdlets do not cause a problem.

(I have tested with no profile scripts to eliminate anything in my profile)

More info available on request....

Attached Logs

Example

PS C:\Data\Git> Start-Transcript -OutputDirectory 'C:\Data'
PS C:\Data\Git>
PS C:\Data\Git> arp /?

Displays and modifies the IP-to-Physical address translation tables used by
<...snip...>

arp -a .... Displays the arp table.
Program 'ARP.EXE' failed to run: The method or operation is not implemented.At line:1 char:1

  • arp /?
  • ~~.
    At line:1 char:1
  • arp /?
  • ~~

    • CategoryInfo : ResourceUnavailable: (:) [], ApplicationFailedException

    • FullyQualifiedErrorId : NativeCommandFailed

PS C:\Data\Git>

Area-Integrated Console Issue-Bug

Most helpful comment

@dlwyatt Thanks Dave! I don't know why I didn't look at the call stack and actually figure out why this was happening. Looks like if I implement the method enough to satisfy this code the problem should go away:

https://github.com/PowerShell/PowerShell/blob/7c9b188c135ed001093641698d48a22fd016f6ab/src/System.Management.Automation/engine/NativeCommandProcessor.cs#L713

I'll try to throw that in with the next Editor Services update.

All 10 comments

I'm seeing these errors even if transcription isn't running.

Edit: Nevermind, transcription is running, enforced by policy.

@gerane has reported this as well. The core problem here is that the native app you're calling is doing something that causes one of the PSHostRawUserInterface methods I don't implement to be called so it fails. The solution is to provide a more complete implementation there (though I'd rather find a way to reuse the real PowerShell ConsoleHost so that we can get past all of the current limitations).

In my case, it happens on every external command I run. Here's the innermost exception:

Message        : The method or operation is not implemented.
Data           : {}
InnerException :
TargetSite     : System.Management.Automation.Host.BufferCell[,] GetBufferContents(System.Management.Automation.Host.Rectangle)
StackTrace     :    at Microsoft.PowerShell.EditorServices.TerminalPSHostRawUserInterface.GetBufferContents(Rectangle rectangle)
                    at System.Management.Automation.Internal.Host.InternalHostRawUserInterface.GetBufferContents(Rectangle r)
                    at System.Management.Automation.NativeCommandProcessor.Complete()
HelpLink       :
Source         : Microsoft.PowerShell.EditorServices
HResult        : -2147467263

Interestingly, GetBufferContents is only called by NativeCommandProcessor.Complete() in a block where it's supposedly transcribing. But if I run Stop-Transcript, it tells me the host is not transcribing. I'll do some more digging to find out what's going on there.

Heh, nevermind. Company's saving powershell transcripts via policy. :)

@ChrisWarwick @daviwil @dlwyatt oh! great find. I just tested and disabled the transcription policies and the errors stopped happening.

I can at least make sure this is disabled when doing presentations or demos now, but would be great to see this fixed.

@daviwil @ChrisWarwick @dlwyatt The issue I encounter, is that depending on how the commands were invoked, these can become terminating errors.

For example, I have a function that runs a plaster template to create a new project, and also initializes the git repo and a bunch of other related tasks. If I run the command in the console, I get errors, but they are non-terminating. If I run this from an Editor Command, it breaks and causes these errors to be terminating errors.

@dlwyatt Thanks Dave! I don't know why I didn't look at the call stack and actually figure out why this was happening. Looks like if I implement the method enough to satisfy this code the problem should go away:

https://github.com/PowerShell/PowerShell/blob/7c9b188c135ed001093641698d48a22fd016f6ab/src/System.Management.Automation/engine/NativeCommandProcessor.cs#L713

I'll try to throw that in with the next Editor Services update.

@daviwil Here is my issue from PSES PowerShell/PowerShellEditorServices#396

I looking forward to this fix. We have transcription on via Policy also.
right now any try/catch with a native command fails 100% of the time.

Was this page helpful?
0 / 5 - 0 ratings