我写了一个脚本来找到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
答案 0 :(得分:3)
我觉得奇怪的是你会得到带有该代码的空行。无法想到用户的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或empty值的计算结果为False。 Where-Object{$_.GID}
仅允许具有GID
的填充属性的对象作为输出传递。您也将从字符串静态方法中获得类似的结果。这些还可以为您的代码增加可读性。
... | Where-Object{[string]::IsNullOrWhiteSpace($_.GID)} | ...
还有[string]::IsNullOrEmpty()
答案 1 :(得分:-1)
排序对象有一个-unique属性,它将删除大多数的空白行,除了一个,你猜对了。你也可以管道到
where-object -ne '`n'
或类似的东西,让我知道我是否应该详细说明。