@@ -15,6 +15,14 @@ HTTP Accept.
1515HTTP Accept indicates what content types the web request will accept as a response.
1616'
1717 }
18+ . EXAMPLE
19+ New-PipeScript -Parameter @{"bar"=@{
20+ Name = "foo"
21+ Help = 'Foobar'
22+ Attributes = "Mandatory","ValueFromPipelineByPropertyName"
23+ Aliases = "fubar"
24+ Type = "string"
25+ }}
1826 #>
1927 [Alias (' New-ScriptBlock' )]
2028 param (
@@ -228,7 +236,7 @@ HTTP Accept indicates what content types the web request will accept as a respon
228236 elseif ($EachParameter.Value -is [string ]) {
229237 # embed it directly.
230238 $ParametersToCreate [$EachParameter.Key ] = $EachParameter.Value
231- }
239+ }
232240 # If the value is a ScriptBlock
233241 elseif ($EachParameter.Value -is [ScriptBlock ]) {
234242 # Embed it
@@ -252,6 +260,71 @@ HTTP Accept indicates what content types the web request will accept as a respon
252260 $ParametersToCreate [$EachParameter.Key ] = # join it's elements by newlines
253261 $EachParameter.Value -join [Environment ]::Newline
254262 }
263+ elseif ($EachParameter.Value -is [Collections.IDictionary ] -or
264+ $EachParameter.Value -is [PSObject ]) {
265+ $parameterMetadata = $EachParameter.Value
266+ $parameterName = $EachParameter.Key
267+ if ($parameterMetadata.Name ) {
268+ $parameterName = $parameterMetadata.Name
269+ }
270+
271+ $parameterAttributeParts = @ ()
272+ $ParameterOtherAttributes = @ ()
273+ $attrs =
274+ if ($parameterMetadata.Attributes ) { $parameterMetadata.Attributes }
275+ elseif ($parameterMetadata.Attribute ) { $parameterMetadata.Attribute }
276+
277+ $aliases =
278+ if ($parameterMetadata.Alias ) { $parameterMetadata.Alias }
279+ elseif ($parameterMetadata.Aliases ) { $parameterMetadata.Aliases }
280+
281+ $parameterHelp =
282+ if ($parameterMetadata.Help ) { $parameterMetadata.Help }
283+
284+ $aliasAttribute = @ (foreach ($alias in $aliases ) {
285+ $alias -replace " '" , " ''"
286+ }) -join " ','"
287+
288+ if ($aliasAttribute ) {
289+ $aliasAttribute = " [Alias('$aliasAttribute ')]"
290+ }
291+
292+ foreach ($attr in $attrs ) {
293+ if ($attr -notmatch ' ^\[' ) {
294+ $parameterAttributeParts += $attr
295+ } else {
296+ $ParameterOtherAttributes += $attr
297+ }
298+ }
299+
300+ $parameterType =
301+ if ($parameterMetadata.Type ) {$parameterMetadata.Type }
302+ elseif ($parameterMetadata.ParameterType ) {$parameterMetadata.ParameterType }
303+
304+ $ParametersToCreate [$parameterName ] = @ (
305+ if ($ParameterHelp ) {
306+ $ParameterHelp | embedParameterHelp
307+ }
308+ if ($parameterAttributeParts ) {
309+ " [Parameter($ ( $parameterAttributeParts -join ' ,' ) )]"
310+ }
311+ if ($aliasAttribute ) {
312+ $aliasAttribute
313+ }
314+ if ($parameterType -as [type ]) {
315+ " [$ ( ($parameterType -as [type ]).FullName -replace ' ^System\.' ) ]"
316+ }
317+ elseif ($parameterType ) {
318+ " [PSTypeName('$ ( $parameterType -replace ' ^System\.' ) ')]"
319+ }
320+
321+ if ($ParameterOtherAttributes ) {
322+ $ParameterOtherAttributes
323+ }
324+
325+ ' $' + ($parameterName -replace ' ^$' )
326+ ) -join [Environment ]::newLine
327+ }
255328 }
256329
257330 }
0 commit comments