调用Powershell的命令或者函数,Powershell会用一种内部机制来处理和返回结果。
- 如果没有结果返回,Powershell会返回空。
- 如果仅有一个元素返回,Powershell返回元素本身。
- 如果确实有多个元素,Powershell会将结果转换成数组,再返回。
这样的化,在具体的调用过程中,用户很难确定到底返回的是空,还是一个对象,或者一个对象集合?
这里有两种方案来解决这个问题:
- 针对返回值的类型,进行多路分支处理
(ls "不存在") -eq $null (ls .) -is [array]
- 将结果转换成统一的类型,数组类型,进行统一处理。也非常简单,就是在原有的结果中加上@() 。
PS E:> @(ls $env:TEMPabc).gettype().fullName Get-ChildItem : 找不到路径“C:UsersMosserAppDataLocalTempabc”,因为该路径不存在。 所在位置 行:1 字符: 5 + @(ls <<<< $env:TEMPabc).gettype().fullName + CategoryInfo : ObjectNotFound: (C:UsersMosserAppDataLocalTempabc:String) [Get-ChildItem], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand System.Object[] PS E:> @(ls a.txt ).gettype().fullName System.Object[]
上面的命令尽管出错了,返回值仍然为数组。可用通过-ErrorAction SilentlyContinue 抑制错误输出。
本文链接: https://www.pstips.net/powershell-convert-result-to-array.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!