PowerShell和C#ASP.NET之间的管道传输

时间:2015-08-18 21:51:50

标签: c# asp.net windows powershell named-pipes

我很难将PowerShell脚本中的数据传输到C#程序中。

Thanks to this answer I was given,我已经提出了一个工作解决方案,用于在两个PowerShell脚本Sender.ps1Receiver.ps1)之间管理数据。

问题是,这个脚本在翻译成C#代码时不起作用。 即使我通过Receiver.ps1课程在C#中调用PowerShell,它仍然无效。

This answer to a similar question让我相信管道的命名空间不一样,但当我尝试将Global添加到每个管道的开头时,它没有做任何事情。同样,如果我作为PowerShell脚本运行,它可以在两个.ps1中运行,但是如果我从C#调用其中一个脚本,或者直接将它转换为C#,它将完全停止工作。

有没有人知道Windows中的命名空间和流水线技术?

Sender.ps1 :除了通过管道发送数据外,不与C#程序交互

## Establish Pipe
  $pipe = New-Object System.IO.Pipes.NamedPipeClientStream("Global\\.pipe\brokenPipe");
  $pipe.Connect();
  $stream = New-Object System.IO.StreamWriter($pipe);

## Communicate through Pipe
  SendStuff();

## Close Pipe
  $stream.Dispose();
  $pipe.Dispose();

Receiver.ps1:用于从管道读取的PowerShell程序。 工作如果我右键单击并以PowerShell身份运行。 无效如果我通过C#的PowerShell调用它,它只会挂在WaitForConnection()。 C#程序正在正确地调用脚本,我用一个充满信息的虚拟文件(正确读取了C#)对此进行了测试。出于某种原因,管道在通过我的C#应用​​程序

运行时停止工作
## Establish Pipe
  $pipe = new-object System.IO.Pipes.NamedPipeServerStream("Global\\.pipe\brokenPipe");
  $pipe.WaitForConnection();
  $stream = new-object System.IO.StreamReader($pipe);

## Communicate through Pipe
  ReadStuff();

## Close Pipe
  $stream.Dispose();
  $pipe.Dispose();

C#接收器功能:我将其作为PowerShell.Create()的替代品,但这也不起作用(即使它与{的代码完全相同) {1}}。

Receiver.ps1

1 个答案:

答案 0 :(得分:2)

全局命名空间前缀为Global\,而不是Global\\。你不需要在Powershell中逃避反斜杠。

  • Powershell:Global\pipename
  • C#:@"Global\pipename""Global\\pipename"