And*_*man 3 powershell powershell-4.0
PowerShell 4.0
我在这里阅读了有关Sort-Objectcmdlet的信息(TechNet页面).我不明白如何使用-InputObject参数.该页面没有示例.我也没有在互联网上找到这个信息.我将非常感谢它的使用示例,或者用于链接到具有该信息的Internet页面.
我试图用它来了解我的目的(根据文件):
$items = ('a','b','c','d')
$result = sort -InputObject $items -Descending
Run Code Online (Sandbox Code Playgroud)
但是result变量具有与其相同的值items而不是其下降版本.
谢谢.
bea*_*ker 10
InputObject是用于获取管道输入的参数的通用名称.它是内部PowerShell命名约定的一部分,并没有什么特别之处.
您的示例无法正常工作,因为当您将集合传递给InputObject参数时,它会被视为单个项目而不会被解包为单个元素,因此它不会被排序.这允许您对集合的集合进行排序.
考虑这个例子:
这是如何Sort-Object工作:
function Add-Quotes
{
Param
(
[Parameter(ValueFromPipeline = $true)]
$InputObject
)
Process
{
"'$InputObject'"
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,数组由管道自动解包,然后$InputObject在每次迭代中为每个迭代分配变量,然后在Process块中处理:
PS> $items | Add-Quotes
'a'
'b'
'c'
'd'
Run Code Online (Sandbox Code Playgroud)
但是当你将一个集合传递给InputObject它时,它没有被迭代,因为没有管道来解开它:
PS> Add-Quotes -InputObject $items
'a b c d'
Run Code Online (Sandbox Code Playgroud)
有时它是一种理想的行为,有时你需要打开集合,无论它们来自哪里.在这种情况下,您使用内部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'
Run Code Online (Sandbox Code Playgroud)
希望这能让你清楚.
| 归档时间: |
|
| 查看次数: |
7248 次 |
| 最近记录: |