考虑以下Powershell脚本,该脚本在C:\中搜索名称为“ og”的文件夹:
PS C:\>(ls |%{$ _。Name} |?{$ _。Contains(“ og”)}) 性能日志 程序文件 setup.log
现在,我缩小搜索范围以仅获取一项:
PS C:\>(ls |%{$ _。Name} |?{$ _。Contains(“ Prog”)}) 程序文件
奇怪的是,第一个操作产生一个数组,而第二个操作(IMHO在语义上是相同的操作,因此它应产生相同类型的结果)产生一个字符串。在以下结果中可以看出:
PS C:\>(ls |%{$ _。Name} |?{$ _。Contains(“ og”)}))。长度 3 PS C:\>(ls |%{$ _。Name} |?{$ _。Contains(“ Prog”)}))。长度 13
这可能非常令人讨厌,因为与“ og”匹配的文件夹显然比与“ prog”匹配的文件夹少。
显然,PowerShell隐式地将单个项目数组“拆箱”到单个对象,并且我们永远都不会得到长度为1的数组。似乎每次我想对通过管道传递的结果进行计数时,我都必须检查是否m是否处理数组。
如何防止这种情况发生?您如何处理?
$_.Contains
,然后%{,,$_.Name}
工作... ...