PowerShell 移除对象中的空属性


对象中通常包含了许多信息,对象的属性也同样可能为空。如果想将一个对象中的空属性移除,让它只包含不为空值的属性。可以先将对象转换成哈希表,然后从哈希表中移除为空的属性,再将哈希表中转换成对象。在这期间,你同样有机会对属性名进行排序。

下面给出一个例子,使用WMI对象获取BIOS信息,然后移除值为空的属性。但是下面的例子需要PowerShell 3.0 的支持。

$bios = Get-WmiObject -Class Win32_BIOS

$hashtable = $bios |
Get-Member -MemberType *Property |
Select-Object -ExpandProperty Name |
Sort-Object |
ForEach-Object -Begin { 
  [System.Collections.Specialized.OrderedDictionary]$rv=@{} 
  } -process {
  if ($bios.$_ -eq $null)
  {
    Write-Warning "Removing empty property $_"
  }
  else
  {
    $rv.$_ = $bios.$_
  }
} -end {$rv}
$biosNew = New-Object PSObject
$biosNew | Add-Member ($hashtable) -ErrorAction SilentlyContinue

$biosNew 

这里稍微留意一下,使用了一个.NET System.Collections.Specialized.OrderedDictionary 类型。它会创建一个特殊的排序的哈希表。因为正常情况下,使用的哈希表中不支持键值排序。

原文链接:Removing Empty Object Properties

本文链接: https://www.pstips.net/powershell-removing-empty-object-properties.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

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

发表评论

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