Chapters/scripting-at-scale/SquareRoot.ps1

Function SquareRoot {
    [cmdletbinding()]
    Param(
        [Parameter(Position = 0, Mandatory, ValueFromPipeline)]
        [int[]]$Value
    )

    Begin {
        Write-Verbose "[BEGIN ] Starting: $($MyInvocation.Mycommand)"
    } #begin

    Process {
        foreach ($item in $value) {
            [pscustomobject]@{
                Value      = $item
                SquareRoot = [math]::Sqrt($item)
            }
        }
    } #process

    End {
        Write-Verbose "[END ] Ending: $($MyInvocation.Mycommand)"
    } #end
}

<#
test performance
 
$n = 1..1000
measure-command { $n | squareroot}
measure-command { squareroot $n }
 
10,100,500,1000,5000,10000 | foreach {
 $n = 1..$_
 $pipe = (measure-command { $n | squareroot}).totalMilliseconds
 $param = (measure-command {squareroot $n}).TotalMilliseconds
 
 [pscustomobject]@{
  ItemCount = $_
  PipelineMS = $pipe
  ParameterMS = $param
  PctDiff = 100 - (($param/$pipe) * 100 -as [int])
 }
}
#>