powershell - Sort-Object cmdlet 的 -InputObject 参数如何工作?

标签 powershell powershell-4.0

PowerShell 4.0

我读过 Sort-Object cmdlet here (TechNet 页面)。我不明白如何使用 -InputObject范围。该页面没有示例。我也没有在互联网上找到这个信息。我将非常感谢它的使用示例,或者包含该信息的 Internet 页面的链接。

我尝试使用它来理解它的目的(根据文档):

$items = ('a','b','c','d')
$result = sort -InputObject $items -Descending

但是result变量具有与 items 相同的值而不是它的下降版本。

谢谢你。

最佳答案

InputObject是用于接受管道输入的参数的通用名称。它是内部 PowerShell 命名约定的一部分,没有什么特别之处。

您的示例并没有像您认为的那样工作,因为当您将集合传递给 InputObject 时参数,它被视为单个项目,不会展开为单个元素,因此不会对其进行排序。这允许您对集合进行排序。

考虑这个例子:

就是这样Sort-Object作品:

function Add-Quotes
{
    Param
    (
        [Parameter(ValueFromPipeline = $true)]
        $InputObject
    )

    Process
    {
        "'$InputObject'"
    }
}

请注意,管道会自动解开数组,然后将 idividial 项分配给 $InputObject每次迭代中的变量,然后在 Process 中处理堵塞:
PS> $items | Add-Quotes
'a'
'b'
'c'
'd'

但是当您将集合传递给 InputObject 时它没有迭代,因为没有管道可以解开它:
PS> Add-Quotes -InputObject $items
'a b c d'

有时这是一种理想的行为,有时您需要解开集合,无论它们来自何处。在这种情况下,您使用内部 foreach 循环来执行此操作:
function Add-Quotes
{
    Param
    (
        [Parameter(ValueFromPipeline = $true)]
        [string[]]$InputObject
    )

    Process
    {
        foreach($item in $InputObject)
        {
            "'$item'"
        }
    }
}

PS > $items | Add-Quotes
'a'
'b'
'c'
'd'

PS > Add-Quotes -InputObject $items
'a'
'b'
'c'
'd'

希望这能让你清楚。

关于powershell - Sort-Object cmdlet 的 -InputObject 参数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35289705/

相关文章:

powershell - 从远程计算机上卸载程序

windows - 启动 PowerShell session 时出错

powershell - 如何在Powershell脚本中使用属性值

powershell - Azure 函数和 Powershell - 无法使用证书登录 AzureRmAccount

powershell - 删除数组的最后一个字符

excel - Powershell等待Excel中执行宏

powershell - 过滤数据部分,包括起始行和结束行 - PowerShell

c# - 在使用 Powershell Api 时,有什么方法可以在 C# 中将 PSObject 转换为字符串

invoke - Powershell Invoke-RestMethod 授权 header

c# - 如何通过 New-Variable 将数组变量注入(inject) PowerShell 运行空间