protected void ProcessingThreadStart(object state) { try { #if !CORECLR // CurrentUICulture is not available in Thread Class in CSS // WinBlue: 621775. Thread culture is not properly set // for local background jobs causing experience differences // between local console and local background jobs. Thread.CurrentThread.CurrentUICulture = Microsoft.PowerShell.NativeCultureResolver.UICulture; Thread.CurrentThread.CurrentCulture = Microsoft.PowerShell.NativeCultureResolver.Culture; #endif string data = state as string; OutOfProcessUtils.ProcessData(data, callbacks); } catch (Exception e) { PSEtwLog.LogOperationalError( PSEventId.TransportError, PSOpcode.Open, PSTask.None, PSKeyword.UseAlwaysOperational, Guid.Empty.ToString(), Guid.Empty.ToString(), OutOfProcessUtils.EXITCODE_UNHANDLED_EXCEPTION, e.Message, e.StackTrace); PSEtwLog.LogAnalyticError( PSEventId.TransportError_Analytic, PSOpcode.Open, PSTask.None, PSKeyword.Transport | PSKeyword.UseAlwaysAnalytic, Guid.Empty.ToString(), Guid.Empty.ToString(), OutOfProcessUtils.EXITCODE_UNHANDLED_EXCEPTION, e.Message, e.StackTrace); // notify the remote client of any errors and fail gracefully if (_exitProcessOnError) { originalStdErr.WriteLine(e.Message + e.StackTrace); Environment.Exit(OutOfProcessUtils.EXITCODE_UNHANDLED_EXCEPTION); } } }
protected void OnDataPacketReceived(byte[] rawData, string stream, Guid psGuid) { string streamTemp = System.Management.Automation.Remoting.Client.WSManNativeApi.WSMAN_STREAM_ID_STDIN; if (stream.Equals(DataPriorityType.PromptResponse.ToString(), StringComparison.OrdinalIgnoreCase)) { streamTemp = System.Management.Automation.Remoting.Client.WSManNativeApi.WSMAN_STREAM_ID_PROMPTRESPONSE; } if (Guid.Empty == psGuid) { lock (_syncObject) { sessionTM.ProcessRawData(rawData, streamTemp); } } else { // this is for a command AbstractServerTransportManager cmdTM = null; lock (_syncObject) { cmdTM = sessionTM.GetCommandTransportManager(psGuid); } if (cmdTM != null) { // not throwing when there is no associated command as the command might have // legitimately closed while the client is sending data. however the client // should die after timeout as we are not sending an ACK back. cmdTM.ProcessRawData(rawData, streamTemp); } else { // There is no command transport manager to process the input data. // However, we still need to acknowledge to the client that this input data // was received. This can happen with some cmdlets such as Select-Object -First // where the cmdlet completes before all input data is received. originalStdOut.WriteLine(OutOfProcessUtils.CreateDataAckPacket(psGuid)); } } }
protected void ProcessingThreadStart(object state) { try { string data = state as string; OutOfProcessUtils.ProcessData(data, callbacks); } catch (Exception e) { PSEtwLog.LogOperationalError( PSEventId.TransportError, PSOpcode.Open, PSTask.None, PSKeyword.UseAlwaysOperational, Guid.Empty.ToString(), Guid.Empty.ToString(), OutOfProcessUtils.EXITCODE_UNHANDLED_EXCEPTION, e.Message, e.StackTrace); PSEtwLog.LogAnalyticError( PSEventId.TransportError_Analytic, PSOpcode.Open, PSTask.None, PSKeyword.Transport | PSKeyword.UseAlwaysAnalytic, Guid.Empty.ToString(), Guid.Empty.ToString(), OutOfProcessUtils.EXITCODE_UNHANDLED_EXCEPTION, e.Message, e.StackTrace); // notify the remote client of any errors and fail gracefully if (_exitProcessOnError) { originalStdErr.WriteLine(e.Message + e.StackTrace); Environment.Exit(OutOfProcessUtils.EXITCODE_UNHANDLED_EXCEPTION); } } }