我目前正在编写一些命令,如PowerShell cmdlets
,并且没有问题做到目前为止我需要的东西(来自管道的进程对象)。但是我现在需要做一些不同的事情,从零开始并生成对象(也就是说,我没有记录作为输入,只有一个简单的文本param
,我需要为管道的下一个阶段生成数据)
我如何将新数据“传递”到管道?有人能为我提供一个像out-generate -size X这样的命令的样本,它会在管道中以我能做的方式生成X顺序整数
out-generate -size 10 | out-gridview
到目前为止,我不知道如何将数据作为输出发送,我知道如何写数据(WriteObject
),但我假设(可能是错误的)它只写文本表示而不发送反对管道。或者我只需要将内容传递给WriteObject
?
答案 0 :(得分:0)
您应该使用Write-Output
cmdlet。但是,它是默认的cmdlet,如果语句的返回值(通过仅使用变量名称或cmdlet的返回值)是“语句的结尾”,将执行该命令。
所以你可以通过显式调用Write-Output来执行以下操作(我发现这使得代码更容易阅读):
function Get-Integers
{
PARAM (
$NumberOfIntegers
)
for($i = 0; $i -lt $NumberOfIntegers; $i ++)
{
Write-Output $i
}
}
Get-Integers 10 | Out-GridView
或者您可以忽略Write-Output
来电。
function Get-Integers
{
PARAM (
$NumberOfIntegers
)
for($i = 0; $i -lt $NumberOfIntegers; $i ++)
{
$i
}
}
Get-Integers 10 | Out-GridView
关于Write-Output
的文档(如果您致电Get-Help Write-Output -Full
,则可以获得),其中包括:
将指定的对象发送到管道中的下一个命令。如果该命令是管道中的最后一个命令,则对象将显示在控制台中。
答案 1 :(得分:0)
最后,看起来调用WriteObject实际上确实做到了这一点,除非我首先想到的(它不会将对象作为文本写入控制台,但实际上将其作为对象写入管道,因为我需要)。 / p>