生成输出对象?

时间:2014-03-16 10:30:07

标签: c# powershell powershell-v2.0 powershell-v3.0 cmdlets

我目前正在编写一些命令,如PowerShell cmdlets,并且没有问题做到目前为止我需要的东西(来自管道的进程对象)。但是我现在需要做一些不同的事情,从零开始并生成对象(也就是说,我没有记录作为输入,只有一个简单的文本param,我需要为管道的下一个阶段生成数据)

我如何将新数据“传递”到管道?有人能为我提供一个像out-generate -size X这样的命令的样本,它会在管道中以我能做的方式生成X顺序整数

out-generate -size 10 | out-gridview

到目前为止,我不知道如何将数据作为输出发送,我知道如何写数据(WriteObject),但我假设(可能是错误的)它只写文本表示而不发送反对管道。或者我只需要将内容传递给WriteObject

2 个答案:

答案 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>