两个单独的Powershell进程之间的管道

两个单独的Powershell进程之间的管道,powershell,pipelining,Powershell,Pipelining,假设我有两个PowerShell程序正在运行:Producer.ps1和Consumer.ps1 有没有办法在我拥有的两个.ps1文件之间建立客户机-服务器关系 具体来说,Producer.ps1输出包含登录信息的PSObject。是否有任何方法可以在两个对象之间建立一个侦听器和命名管道,以将此PSObject从Producer.ps1直接传递到Consumer.ps1 (注意:这两个文件不能合并,因为它们都需要作为不同的Windows用户运行。我知道一种可能的通信解决方案是将PSObject

假设我有两个PowerShell程序正在运行:
Producer.ps1
Consumer.ps1

有没有办法在我拥有的两个
.ps1
文件之间建立客户机-服务器关系

具体来说,
Producer.ps1
输出包含登录信息的
PSObject
。是否有任何方法可以在两个对象之间建立一个侦听器和命名管道,以将此
PSObject
Producer.ps1
直接传递到
Consumer.ps1



注意:这两个文件不能合并,因为它们都需要作为不同的Windows用户运行。我知道一种可能的通信解决方案是将
PSObject
写入文本/xml文件,然后让客户端读取并擦除该文件,但我不希望这样做,因为它会暴露凭据。我对任何事情都持开放态度您的建议)

我找到了这个链接,它描述了如何执行您的请求:

我对它进行了测试,能够在两个单独的Powershell会话之间传递数据

服务器端:

$pipe=new-object System.IO.Pipes.NamedPipeServerStream("\\.\pipe\Wulf");
'Created server side of "\\.\pipe\Wulf"'
$pipe.WaitForConnection(); 

$sr = new-object System.IO.StreamReader($pipe); 
while (($cmd= $sr.ReadLine()) -ne 'exit') 
{
 $cmd
}; 

$sr.Dispose();
$pipe.Dispose();
客户端:

$pipe = new-object System.IO.Pipes.NamedPipeClientStream("\\.\pipe\Wulf");
 $pipe.Connect(); 

$sw = new-object System.IO.StreamWriter($pipe);
$sw.WriteLine("Go"); 
$sw.WriteLine("start abc 123"); 
$sw.WriteLine('exit'); 

$sw.Dispose(); 
$pipe.Dispose();

这是一个很好的发现,也正是我想要做的。非常感谢!对未来读者的澄清:服务器端是监听器,客户端是生产者。在这种情况下,客户端通过管道将消息发送到服务器。