@@ -13,6 +13,14 @@ HTTP Accept.
1313HTTP Accept indicates what content types the web request will accept as a response.
1414'
1515 }
16+ . EXAMPLE
17+ New-PipeScript -Parameter @{"bar"=@{
18+ Name = "foo"
19+ Help = 'Foobar'
20+ Attributes = "Mandatory","ValueFromPipelineByPropertyName"
21+ Aliases = "fubar"
22+ Type = "string"
23+ }}
1624 #>
1725 [Alias (' New-ScriptBlock' )]
1826 param (
@@ -265,7 +273,7 @@ HTTP Accept indicates what content types the web request will accept as a respon
265273 elseif ($EachParameter.Value -is [string ]) {
266274 # embed it directly.
267275 $ParametersToCreate [$EachParameter.Key ] = $EachParameter.Value
268- }
276+ }
269277 # If the value is a ScriptBlock
270278 elseif ($EachParameter.Value -is [ScriptBlock ]) {
271279 # Embed it
@@ -289,6 +297,64 @@ HTTP Accept indicates what content types the web request will accept as a respon
289297 $ParametersToCreate [$EachParameter.Key ] = # join it's elements by newlines
290298 $EachParameter.Value -join [Environment ]::Newline
291299 }
300+ elseif ($EachParameter.Value -is [Collections.IDictionary ] -or
301+ $EachParameter.Value -is [PSObject ]) {
302+ $parameterMetadata = $EachParameter.Value
303+ $parameterName = $EachParameter.Key
304+ if ($parameterMetadata.Name ) {
305+ $parameterName = $parameterMetadata.Name
306+ }
307+
308+ $parameterAttributeParts = @ ()
309+ $ParameterOtherAttributes = @ ()
310+ $attrs =
311+ if ($parameterMetadata.Attributes ) { $parameterMetadata.Attributes }
312+ elseif ($parameterMetadata.Attribute ) { $parameterMetadata.Attribute }
313+ $aliases =
314+ if ($parameterMetadata.Alias ) { $parameterMetadata.Alias }
315+ elseif ($parameterMetadata.Aliases ) { $parameterMetadata.Aliases }
316+ $parameterHelp =
317+ if ($parameterMetadata.Help ) { $parameterMetadata.Help }
318+ $aliasAttribute = @ (foreach ($alias in $aliases ) {
319+ $alias -replace " '" , " ''"
320+ }) -join " ','"
321+ if ($aliasAttribute ) {
322+ $aliasAttribute = " [Alias('$aliasAttribute ')]"
323+ }
324+
325+ foreach ($attr in $attrs ) {
326+ if ($attr -notmatch ' ^\[' ) {
327+ $parameterAttributeParts += $attr
328+ } else {
329+ $ParameterOtherAttributes += $attr
330+ }
331+ }
332+ $parameterType =
333+ if ($parameterMetadata.Type ) {$parameterMetadata.Type }
334+ elseif ($parameterMetadata.ParameterType ) {$parameterMetadata.ParameterType }
335+ $ParametersToCreate [$parameterName ] = @ (
336+ if ($ParameterHelp ) {
337+ $ParameterHelp | embedParameterHelp
338+ }
339+ if ($parameterAttributeParts ) {
340+ " [Parameter($ ( $parameterAttributeParts -join ' ,' ) )]"
341+ }
342+ if ($aliasAttribute ) {
343+ $aliasAttribute
344+ }
345+ if ($parameterType -as [type ]) {
346+ " [$ ( ($parameterType -as [type ]).FullName -replace ' ^System\.' ) ]"
347+ }
348+ elseif ($parameterType ) {
349+ " [PSTypeName('$ ( $parameterType -replace ' ^System\.' ) ')]"
350+ }
351+
352+ if ($ParameterOtherAttributes ) {
353+ $ParameterOtherAttributes
354+ }
355+ ' $' + ($parameterName -replace ' ^$' )
356+ ) -join [Environment ]::newLine
357+ }
292358 }
293359 }
294360 # If the parameter was a string
0 commit comments