Skip to content

Need test to catch Pipeline-able input with missing process block #1368

@EklipZgit

Description

@EklipZgit

Currently you can create functions / cmdlets with parameters with ValueFromPipeline or ValueFromPipelineByPropertyName, but if you forget the process { } block, only the last pipeline object will be processed by the cmdlet, instead of all of them, resulting in unexpected behavior that can slip through the cracks unnoticed until you pipe a batch of objects to the commandlet and realize that it only processed one of them. PSScriptAnalyzer should default to warning developers to use the process { } block when they use ValueFromPipeline or ValueFromPipelineByPropertyName attributes in a function / cmdlet.

Function Broken
{
	[CmdletBinding()]
	Param(
		[Parameter(ValueFromPipeline)]
		[int]
		$ToPrint
	)
	$ToPrint
}

Function Correct
{
	[CmdletBinding()]
	Param(
		[Parameter(ValueFromPipeline)]
		[int]
		$ToPrint
	)
	process
	{
		$ToPrint	
	}
}

1..10 | Broken
# only 10 was output. PSScriptAnalyzer ought to be catching this

1..10 | Correct
# 1 - 10 were each output, as you would expect

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions