Удалить пустые строки вывода Powershell

Я написал сценарий для поиска GID в AD, он работает нормально, проблема, с которой я столкнулся, заключается в фильтрации пустых (пустых строк)

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

person JoeRod    schedule 18.09.2013    source источник
comment
Попробуйте добавить выражение Where, например | Where {$_.someproperty -ne $null}   -  person Brock Hensley    schedule 18.09.2013
comment
Что вы имеете в виду под пустой строкой? Вы выбираете несколько свойств из объектов, возвращенных вашим поиском. Вы хотите опустить объекты, все свойства которых равны $null? Объекты, где хотя бы один из них $null? Объекты, одним из свойств которых является $null?   -  person Ansgar Wiechers    schedule 18.09.2013
comment
Как и в случае с комментарием Брокса, добавьте | ? {$_} в конец строки.   -  person xXhRQ8sD2L7Z    schedule 20.10.2015


Ответы (2)


Мне кажется странным, что с этим кодом вы будете получать пустые строки. Не могу представить себе сценарий, в котором 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

Нулевое или пустое значение оценивается как False в PowerShell. Where-Object{$_.GID} разрешит передачу в качестве выходных данных только объектов с заполненным свойством для GID. Вы получите аналогичные результаты и от строковых статических методов. Это также улучшит читаемость вашего кода.

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

Также есть [string]::IsNullOrEmpty()

person Matt    schedule 06.05.2015

Объект сортировки имеет свойство -unique, которое удаляет большую часть пустых строк, все, кроме одной, как вы уже догадались. Вы также можете подключиться к

where-object -ne '`n'

или что-то подобное, дайте мне знать, если я должен это уточнить.

person MDMoore313    schedule 18.09.2013