假设我运行了两个PowerShell程序:Producer.ps1
和Consumer.ps1
。
有没有办法在我拥有的两个.ps1
文件之间建立客户端 - 服务器关系?
具体而言,Producer.ps1
输出包含登录信息的PSObject
。有没有办法在两个对象之间建立一个监听器和命名管道,以便将PSObject
从Producer.ps1
直接传递到Consumer.ps1
?
(注意:这两个文件无法合并,因为它们都需要作为不同的Windows用户运行。我知道一种可能的通信解决方案是将PSObject
写入文本/ xml文件,然后让客户端读取并擦除文件,但我宁愿不这样做,因为它暴露了凭据。我愿意接受你提出的任何建议)
答案 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();