0

我写了一个脚本来在 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 
4

2 回答 2

3

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

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

应该改为

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

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

过滤空白

处理这个问题的一个真正简单的 PowerShell 方法是使用一个简单的Where-Object子句。为了论证起见,可以说GID可以为空/空。

$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()

于 2015-05-06T03:44:55.150 回答
-1

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

where-object -ne '`n'

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

于 2013-09-18T19:08:56.057 回答