在两个SEPARATE Powershell进程之间进行流水线操作

时间:2015-08-17 18:09:05

标签: powershell pipelining

假设我运行了两个PowerShell程序:Producer.ps1Consumer.ps1

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

具体而言,Producer.ps1输出包含登录信息的PSObject。有没有办法在两个对象之间建立一个监听器和命名管道,以便将PSObjectProducer.ps1直接传递到Consumer.ps1

注意:这两个文件无法合并,因为它们都需要作为不同的Windows用户运行。我知道一种可能的通信解决方案是将PSObject写入文本/ xml文件,然后让客户端读取并擦除文件,但我宁愿不这样做,因为它暴露了凭据。我愿意接受你提出的任何建议)

1 个答案:

答案 0 :(得分:2)

我发现此链接描述了如何执行您要求的操作: https://gbegerow.wordpress.com/2012/04/09/interprocess-communication-in-powershell/

我测试了它,我能够在两个单独的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();