@@ -55,12 +55,13 @@ function New-PipeScript
5555 )
5656
5757 begin {
58- $ParametersToCreate = [Ordered ]@ {}
59- $allDynamicParameters = @ ()
60- $allBeginBlocks = @ ()
61- $allEndBlocks = @ ()
62- $allProcessBlocks = @ ()
63- $allHeaders = @ ()
58+ $ParametersToCreate = [Ordered ]@ {}
59+ $parameterScriptBlocks = @ ()
60+ $allDynamicParameters = @ ()
61+ $allBeginBlocks = @ ()
62+ $allEndBlocks = @ ()
63+ $allProcessBlocks = @ ()
64+ $allHeaders = @ ()
6465 }
6566
6667 process {
@@ -97,12 +98,14 @@ function New-PipeScript
9798 if ($EachParameter.Value.Ast.ParamBlock ) {
9899 # embed the parameter block (except for the param keyword)
99100 $EachParameter.Value.Ast.ParamBlock.Extent.ToString () -replace
100- ' ^[\s\r\n]param(' -replace ' )[\s\r\n]$'
101+ ' ^[\s\r\n]{0,} param\ (' -replace ' \ )[\s\r\n]{0,} $'
101102 } else {
102103 # Otherwise
104+ ' [Parameter(ValueFromPipelineByPropertyName)]' + (
103105 $EachParameter.Value.ToString () -replace
104106 " \`$ $ ( $eachParameter.Key ) [\s\r\n]$" -replace # Replace any trailing variables
105- ' param()[\s\r\n]{0,}$' # then replace any empty param blocks.
107+ ' param\(\)[\s\r\n]{0,}$' # then replace any empty param blocks.
108+ )
106109 }
107110 }
108111 elseif ($EachParameter.Value -is [Object []]) {
@@ -113,8 +116,16 @@ function New-PipeScript
113116 } elseif ($Parameter -is [string ]) {
114117 $ParametersToCreate [$Parameter ] = @ (
115118 " [Parameter(ValueFromPipelineByPropertyName)]"
116- " `$ $Parameter "
119+ " `$ $Parameter "
117120 )
121+ } elseif ($parameter -is [scriptblock ]) {
122+ $parameterScriptBlocks +=
123+ if ($parameter.Ast.ParamBlock ) {
124+ # embed the parameter block (except for the param keyword)
125+ $parameter
126+ } else {
127+
128+ }
118129 } elseif ($Parameter -is [Object []]) {
119130 $currentParam = @ ()
120131 $currentParamName = ' '
@@ -176,6 +187,11 @@ function New-PipeScript
176187 [Environment ]::NewLine +
177188 ' )'
178189
190+ if ($parameterScriptBlocks ) {
191+ $parameterScriptBlocks += [ScriptBlock ]::new($newParamBlock )
192+ $newParamBlock = $parameterScriptBlocks | Join-PipeScript
193+ }
194+
179195
180196 $createdScriptBlock = [scriptblock ]::Create("
181197$ ( $allHeaders -join [Environment ]::Newline)
0 commit comments