以下是我正在尝试做的事情:
function Set-test { [CmdletBinding()] param( [Parameter(Mandatory=$True, ValueFromPipeline=$True)] [object[]]$inputObject ) Write-Verbose "Set-test: input obj= $inputObject" PROCESS { foreach ($obj in $inputobject) { Write-Output $obj } } } function Get-test { $obj = New-Object PSObject $obj | Add-Member -MemberType NoteProperty -Name "swName" -Value "banana" $obj | Add-Member -MemberType NoteProperty -Name "Version" -Value "3.2.2" Write-Output "obj = $obj" $obj | Set-test -verbose }
这是输出:
PS > Get-test obj = @{swName=banana; Version=3.2.2} VERBOSE: Set-test: input obj= Get-Process : Cannot evaluate parameter 'Name' because its argument is specified as a script block and there is no input. A script block cannot be evaluated without input. At C:\Users\username\Documents\WindowsPowerShell\Modules\mytool\mytools.psm1:204 char:13 + PROCESS { + ~ + CategoryInfo : MetadataError: (:) [Get-Process], ParameterBindingException + FullyQualifiedErrorId : ScriptBlockArgumentNoInput,Microsoft.PowerShell.Commands.GetProcessCommand
从详细的输出中可以看出,该对象没有被传递给该函数,令我感到困惑。
您不能在begin {},process {}或end {}块之外的set-test中写入详细信息。 这是搞砸了。 如果您将其移动到进程{}中,则它可以正常工作。