1+ # 1. PipeScript 101
2+
3+ # PipeScript is a transpiled programming language built atop of PowerShell.
4+
5+ # It aims to make scripting more programmable, and programming more scriptable.
6+
7+ # Using PipeScript, we can expand the syntax of PowerShell in all sorts of ways.
8+
9+ # Let's start with a little example.
10+
11+ # Many modules include a bunch of files in a given directory.
12+
13+ # Instead of typing the same few lines over and over again, we can use the 'include' transpiler
14+
15+ Use-PipeScript {
16+ [Include (' *-*.ps1' )]$PSScriptRoot
17+ }
18+
19+ # This means we could write the .psm1 for almost any module in a single line.
20+
21+ # Let's prove the point by writing a quick module
22+
23+ {[include (' *-*.ps1' )]$psScriptRoot } | Set-Content .\PipeScriptDemo.ps.psm1
24+
25+ # Now, we can export or "build" the file using Export-PipeScript
26+
27+ Export-PipeScript .\PipeScriptDemo.ps.psm1
28+
29+ # We don't have any functions written yet, so let's make one of those, too.
30+
31+ # We can also use psuedo-attributes to make parameters with less code.
32+ # In this case, we use `vfp` to shorten ValueFromPipeline, and `vbn` to shorten ValueFromPipelineByPropertyName
33+ {
34+ function Send-Event {
35+ param (
36+ [vbn (Mandatory)]
37+ [Alias (' EventName' )]
38+ $SourceIdentifier ,
39+ [vfp ()]
40+ $MessageData ,
41+ [vbn ()]
42+ [switch ]
43+ $Passthru
44+ )
45+
46+ process {
47+ $sentEvent = New-Event - SourceIdentifier $SourceIdentifier - MessageData $MessageData
48+ if ($Passthru ) {
49+ $sentEvent
50+ }
51+ }
52+ }
53+ } | Set-Content .\Send-Event .ps.ps1
54+
55+ # Why stop at one command?
56+
57+ # Let's use another very powerful transpiler, Inherit.
58+
59+ {
60+ function Receive-Event
61+ {
62+ [Inherit (' Get-Event' , Abstract)]
63+ param ()
64+
65+ process {
66+ $null = $PSBoundParameters.Remove (' First' )
67+ $events = @ (& $BaseCommand @PSBoundParameters )
68+ [Array ]::Reverse($events )
69+ $events
70+
71+ }
72+ }
73+ } | Set-Content .\Receive-Event .ps.ps1
74+
75+ # Let's export again, this time using it's alias, bps (Build-PipeScript)
76+
77+ bps
78+
79+
80+ # All set? Let's import our module:
81+ Import-Module .\PipeScriptDemo.psm1 - Force - PassThru
0 commit comments