我创建了这个非常简单的PowerShell脚本:
using namespace System.IO
[CmdletBinding(SupportsShouldProcess)]
param
(
[Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)][FileInfo[]]$Files
)
$Files.Length
$Files | Sort-Object | ForEach-Object {$_.Name}
当我用Get-ChildItem
调用的任何结果调用它时,$Files.Length
总是1
,不管目录中有多少文件:
PS C:\Temp> Get-ChildItem -File C:\Windows\ | .\Rename-Test.ps1
1
WMSysPr9.prx
我做错了什么?
1条答案
按热度按时间yr9zkbsy1#
基本上你的脚本只缺少一个
process
块,否则,默认块是end
,这样你就只能看到来自管道的最后一个元素。正如您可能注意到的,由于
-Files
参数的类型为[FileInfo[]]
(FileInfo
示例数组),因此在通过命名参数或按位置传递参数的情况下需要循环。但是,如果您需要收集所有输入,即对其进行排序,则需要
List<T>
来收集process
块中的每个对象,然后在end
块中处理收集的输入,例如:那么对于上述情况,两种方法都可以很好地工作: