PowerShellで名前付きパイプを使用してプロセス間通信(IPC)を実現する方法を紹介します。名前付きパイプを使用すると、同一マシン上の異なるプロセス間で通信が可能になります。
サーバースクリプト
まず、クライアントが接続するのを待ち、メッセージを交換するサーバースクリプトを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
$pipeName = "MyNamedPipe" # 名前付きパイプを作成 $pipeServer = New-Object System.IO.Pipes.NamedPipeServerStream($pipeName, [System.IO.Pipes.PipeDirection]::InOut) Write-Host "サーバーが起動しました。クライアントからの接続を待っています..." # クライアントからの接続を待機 $pipeServer.WaitForConnection() Write-Host "クライアントが接続しました" $reader = New-Object System.IO.StreamReader($pipeServer) $writer = New-Object System.IO.StreamWriter($pipeServer) $writer.AutoFlush = $true while ($true) { # クライアントからのメッセージを読み取る $message = $reader.ReadLine() if ($message -eq $null) { break } Write-Host "クライアントからのメッセージ: $message" # 返事を送信 $response = "Hello " + $message $writer.WriteLine($response) } $pipeServer.Dispose() |
クライアントスクリプト
次に、サーバーに接続してメッセージを送信するクライアントスクリプトを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
$pipeName = "MyNamedPipe" # 名前付きパイプに接続 $pipeClient = New-Object System.IO.Pipes.NamedPipeClientStream(".", $pipeName, [System.IO.Pipes.PipeDirection]::InOut) Write-Host "サーバーに接続しています..." $pipeClient.Connect() Write-Host "サーバーに接続しました" $reader = New-Object System.IO.StreamReader($pipeClient) $writer = New-Object System.IO.StreamWriter($pipeClient) $writer.AutoFlush = $true while ($true) { # メッセージを入力 $message = Read-Host "メッセージを入力してください (終了するには 'exit' と入力)" if ($message -eq "exit") { break } # メッセージを送信 $writer.WriteLine($message) # サーバーからの返事を読み取る $response = $reader.ReadLine() Write-Host "サーバーからの返事: $response" } $pipeClient.Dispose() |
スクリプトの使い方
- サーバースクリプトの起動:
- PowerShellを開き、サーバースクリプトを保存したファイルを実行します。
- 例:
.\ServerScript.ps1
- クライアントスクリプトの起動:
- 別のPowerShellウィンドウを開き、クライアントスクリプトを保存したファイルを実行します。
- 例:
.\ClientScript.ps1
操作例
- サーバースクリプトを起動:
- サーバースクリプトを実行すると、「サーバーが起動しました。クライアントからの接続を待っています…」と表示されます。
- クライアントスクリプトを起動:
- クライアントスクリプトを実行すると、「サーバーに接続しています…」と表示され、接続が確立されると「サーバーに接続しました」と表示されます。
- メッセージの送信:
- クライアントスクリプトのプロンプトでメッセージを入力し、Enterキーを押します。
- 例:
Hello Server
- サーバースクリプトのウィンドウに「クライアントからのメッセージ: Hello Server」と表示され、クライアントスクリプトのウィンドウに「サーバーからの返事: Hello Hello Server」と表示されます。
コメント