6

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

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

具体来说,Producer.ps1输出PSObject包含登录信息。有什么方法可以在两个对象之间建立一个侦听器和命名管道以将其直接传递PSObject到?Producer.ps1Consumer.ps1


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

4

1 回答 1

7

我发现这个链接描述了如何做你所要求的: 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();
于 2015-08-17T18:22:19.443 回答