Powershell将结果转换为数组


调用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
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注