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/