PowerShell和c# ASP.NET之间的流水线

本文关键字:之间 流水线 NET ASP PowerShell | 更新日期: 2023-09-27 18:08:40

我很难将数据从PowerShell脚本导入c#程序。

由于这个答案,我得到了,我已经提出了一个工作解决方案,管道数据之间的两个PowerShell脚本(Sender.ps1Receiver.ps1)。

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

这个类似问题的答案让我相信管道的名称空间是不一样的,但是当我试图将Global添加到每个管道的开头时,它没有做任何事情。同样,如果我作为PowerShell脚本运行,它可以在两个.ps1中工作,但如果我从c#调用其中一个脚本,或者直接将其转换为c#,它就会完全停止工作。

有人知道Windows中的名称空间和流水线吗?


发送者。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();

接收器。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# Receiver Function:我将此作为PowerShell.Create()的替代品,这也不起作用(即使它与Receiver.ps1的代码完全相同)。

void PipeListener(){
## Establish Pipe
  var pipe = new System.IO.Pipes.NamedPipeServerStream("Global''.pipe'brokenPipe");
  pipe.WaitForConnection();
  var stream = new System.IO.StreamReader(pipe);
## Communicate through Pipe
  ReadStuff();
## Close Pipe
  stream.Dispose();
  pipe.Dispose();
}

PowerShell和c# ASP.NET之间的流水线

全局命名空间前缀是Global',不是Global''。在Powershell中不需要转义反斜杠。

  • Powershell: Global'pipename
  • c#: @"Global'pipename""Global''pipename"