的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'"
}
}
请注意,数组是由管道自动解包的,然后在每次迭代中为单个项分配
$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'
希望这对您来说很清楚。