PowerShell 和 C# 之间的流水线 ASP.NET
Pipelining between PowerShell and C# ASP.NET
我很难将数据从 PowerShell 脚本传输到 C# 程序。
,我想出了一个在两个 PowerShell 脚本(Sender.ps1
和 Receiver.ps1
)之间传输数据的可行解决方案.
问题是,此脚本在翻译成 C# 代码时不起作用。
即使我通过 PowerShell
class 在 C# 中调用 Receiver.ps1
,它仍然不起作用。
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# Application
运行 时停止工作
## 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()
,但它也不起作用(即使它与 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"
我很难将数据从 PowerShell 脚本传输到 C# 程序。
Sender.ps1
和 Receiver.ps1
)之间传输数据的可行解决方案.
问题是,此脚本在翻译成 C# 代码时不起作用。
即使我通过 PowerShell
class 在 C# 中调用 Receiver.ps1
,它仍然不起作用。
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# Application
## 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()
,但它也不起作用(即使它与 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"