PowerShell和c# ASP.NET之间的流水线
本文关键字:之间 流水线 NET ASP PowerShell | 更新日期: 2023-09-27 18:08:40
我很难将数据从PowerShell脚本导入c#程序。
由于这个答案,我得到了,我已经提出了一个工作解决方案,管道数据之间的两个PowerShell脚本(Sender.ps1
和Receiver.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();
}
全局命名空间前缀是Global'
,不是Global''
。在Powershell中不需要转义反斜杠。
- Powershell:
Global'pipename
- c#:
@"Global'pipename"
或"Global''pipename"