File: send_named_pipe.ps1

package info (click to toggle)
ddnet 19.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 68,960 kB
  • sloc: cpp: 195,050; ansic: 58,572; python: 5,568; asm: 946; sh: 941; java: 366; xml: 206; makefile: 31
file content (41 lines) | stat: -rw-r--r-- 1,313 bytes parent folder | download
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
30
31
32
33
34
35
36
37
38
39
40
41
# This PowerShell script connects to a Named Pipe server,
# sends one message and then disconnects again.
# The first argument is the name of the pipe.
# The second argument is the message to send.
if ($args.length -lt 2) {
	Write-Output "Usage: ./send_named_pipe.ps1 <pipename> <message> [message] ... [message]"
	exit -1
}

$Wrapper = [pscustomobject]@{
	Pipe = new-object System.IO.Pipes.NamedPipeClientStream(
		".",
		$args[0],
		[System.IO.Pipes.PipeDirection]::InOut,
		[System.IO.Pipes.PipeOptions]::None,
		[System.Security.Principal.TokenImpersonationLevel]::Impersonation
	)
	Reader = $null
	Writer = $null
}
try {
	$Wrapper.Pipe.Connect(5000)
	$Wrapper.Reader = New-Object System.IO.StreamReader($Wrapper.Pipe)
	$Wrapper.Writer = New-Object System.IO.StreamWriter($Wrapper.Pipe)
	$Wrapper.Writer.AutoFlush = $true
	for ($i = 1; $i -lt $args.length; $i++) {
		$Wrapper.Writer.WriteLine($args[$i])
	}
	# Wait for pipe contents to be read.
	$Wrapper.Pipe.WaitForPipeDrain()
	# Dispose the pipe, which also calls Flush and Close.
	$Wrapper.Pipe.Dispose()
	# Explicity set error level 0 for success, as otherwise the current error level is kept.
	exit 0
} catch [TimeoutException] {
	Write-Output "Timeout connecting to pipe"
	exit 1
} catch [System.IO.IOException] {
	Write-Output "Broken pipe"
	exit 2
}