【问题标题】:Remove blank lines Powershell output删除空白行 Powershell 输出
【发布时间】:2013-09-18 18:51:55
【问题描述】:

我编写了一个脚本来在 AD 中查找 GID,这工作正常,我遇到的问题是过滤掉空白(空行)

 $searcher=[adsisearcher]"(objectCategory=user)"
$result = $searcher.FindAll()
$result | Select-Object @{Name="DN";Expression+{$_.properties.distinguishedname}},@{Name="gid";Expression={$_.properties.gidnumber }} |Sort-Object -Property gid 

【问题讨论】:

  • 尝试添加Where 语句,例如| Where {$_.someproperty -ne $null}
  • “空白行”是什么意思?您从搜索返回的对象中选择多个属性。是否要省略所有属性为$null 的对象?其中至少有一个是$null 的对象?一个特定属性为$null的对象?
  • 与 Brocks 评论类似,在行尾添加 | ? {$_}

标签: powershell blank-line


【解决方案1】:

我觉得奇怪的是,您会在该代码中得到空行。想不出用户的distinguishedname 为空的场景。我确实看到您的代码的一个问题可能只是您的第一个计算表达式中的拼写错误:

@{Name="DN";Expression+{$_.properties.distinguishedname}}

应该是

@{Name="DN";Expression={$_.properties.distinguishedname}}

但是,这应该只是产生了一个在执行之前很容易被发现的语法错误。

过滤空白

处理此问题的真正简单的 PowerShell 方法是使用简单的 Where-Object 子句。为了论证起见,假设GID 可能为空/null。

$result | Select-Object @{Name="DN";Expression={$_.properties.distinguishedname}},@{Name="gid";Expression={$_.properties.gidnumber }} | Where-Object{$_.GID} | Sort-Object -Property gid

在 PowerShell 中,null 或空值的计算结果为 False。 Where-Object{$_.GID} 将只允许具有 GID 的填充属性的对象作为输出传递。您也将从字符串静态方法中获得类似的结果。这些也会增加代码的可读性。

... | Where-Object{[string]::IsNullOrWhiteSpace($_.GID)} | ...

还有[string]::IsNullOrEmpty()

【讨论】:

    【解决方案2】:

    Sort Object 有一个 -unique 属性,它将删除 大部分 的空行,除了你猜到的一个。您也可以通过管道连接到

    where-object -ne '`n'
    

    或类似的东西,让我知道是否应该详细说明。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      相关资源
      最近更新 更多