Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/49: Рейтинг темы: голосов - 49, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 19.09.2014
Сообщений: 4

Проверка на наличие пустых полей

19.09.2014, 08:50. Показов 11353. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые люди. Помогите пожалуйста с проблемой. таким скриптом экспортирую пользователей из АД в csv
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = "LDAP://OU=xxx,DC=xxx,DC=ru"
$objSearcher.Filter = "(&(objectCategory=person)(!userAccountControl:1.2.840.113556.1.4.803:=2))"
$users = $objSearcher.FindAll()
$users.Count
$users | ForEach-Object {
   $user = $_.Properties
   New-Object PsObject -Property @{
   ФИО = [string]$user.cn
   Отдел = [string]$user.department
   Login = [string]$user.samaccountname 
   }
} | Export-Csv -NoClobber -Encoding utf8 -Path  d:\user.csv
Но проблема в том, что никак не получается сделать проверку на пустые поля. Т.е. мне нужно, если хоть одно поле пустое, чтобы вся строка не бралась в експорт файла.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.09.2014, 08:50
Ответы с готовыми решениями:

Проверка на наличие пустых параметров
Здравствуйте! Не очень понимаю командные файлы, но пытаюсь разобраться. Подскажите, как можно сделать проверку на наличие пустых...

Проверка на наличие пустых записей
Здравствуйте! У меня вот такая небольшая проблема. Программа не выполняет проверку на наличие пустых записей, когда специально оставляю не...

Проверка пустых полей
Добрый вечер. Подскажите как проверить пустые ли поля text box на форме?если нет, то выводить сообщение "Заполните пустые поля"

28
 Аватар для borne
88 / 88 / 37
Регистрация: 28.11.2012
Сообщений: 309
19.09.2014, 11:34
по идее можно попробовать перед "New-Object PsObject -Property @" сделать проверку:
PowerShell
1
2
3
4
5
6
7
if ($user.cn -ne "" -and $user.department -ne "" -and $user.samaccountname -ne "") {
New-Object PsObject -Property @{
ФИО = [string]$user.cn
Отдел = [string]$user.department
Login = [string]$user.samaccountname 
}
}
0
0 / 0 / 0
Регистрация: 19.09.2014
Сообщений: 4
19.09.2014, 12:16  [ТС]
Спасибо, но это пробовал и ничего не получается..... игнорирует эту проверку.
0
 Аватар для borne
88 / 88 / 37
Регистрация: 28.11.2012
Сообщений: 309
19.09.2014, 12:39
интересно...а если так:
PowerShell
1
$users|?{$_.cn -ne "" -and $_.department -ne "" -and $_.samaccountname -ne ""}|Foreach-object{}...
и далее по скрипту...
еще вариант поменять "" на $NULL
еще как догадка...может там пробелы стоят вместо пустоты...
0
0 / 0 / 0
Регистрация: 19.09.2014
Сообщений: 4
19.09.2014, 12:52  [ТС]
не получается.... игнорирует... уже и не знаю, что делать.

Добавлено через 6 минут
похоже я понял в чем проблема, в АД у этих пользователей тип карточки не учетная запись, а контакт в которой нет вообще поля логина. А по типу карточки можно фильтрануть? или по отсутствию поля samaccountname?
0
 Аватар для borne
88 / 88 / 37
Регистрация: 28.11.2012
Сообщений: 309
19.09.2014, 13:56
а пробовали после -ne вместо "" прописать $NULL ? у меня отфильтровались записи в которых нету department
0
0 / 0 / 0
Регистрация: 19.09.2014
Сообщений: 4
19.09.2014, 14:30  [ТС]
пробовал, не помогло, т.к. там этого поля вообще нет. Но я сделал, задал жестко при наличии какого условия исключать и все заработало. Спасибо.
0
 Аватар для borne
88 / 88 / 37
Регистрация: 28.11.2012
Сообщений: 309
19.09.2014, 14:42
выложи итоговый скрипт, может кому пригодится...
0
0 / 0 / 0
Регистрация: 17.05.2023
Сообщений: 1
17.05.2023, 04:14
Столкнулся с похожей ситуацией. Вот такого вида условие позволило отсеять пустые строки.

PowerShell
1
2
3
4
 if ($LoginText.Text -ne '' -and $LoginText.Text -ne $NULL -and $PasswordText.Text -ne '' -and $PasswordText.Text -ne $NULL) {
      $login = $LoginText.Text
      $password = $PasswordText.Text  
    }
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,664
Записей в блоге: 65
17.05.2023, 06:57
PowerShell
1
@('', $null, " ", 0, 1).Where{$_}.foreach{"[$_]"}
Code
1
2
[ ]
[1]
я данной вольности не одобряю, и лично имел из за этого много лишнего дебага, но кто я такой...

Добавлено через 3 минуты
PowerShell
1
2
3
4
5
6
!0
!$null
!""
!" "
!1
![datetime]::Now
Code
1
2
3
4
5
6
True
True
True
False
False
False
0
Любознательный
 Аватар для YuS_2
7406 / 2256 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
18.05.2023, 09:00
На все изыски и игры с объектами boolean, существует официальная документация:
о booleans
- вот на её основе можно и покреативить...
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,664
Записей в блоге: 65
18.05.2023, 12:19
YuS_2, я х3 как к этому относиться... ну есть и есть... есть ведь например Креативный учёт
0
 Аватар для volodin661
6791 / 2288 / 348
Регистрация: 10.12.2013
Сообщений: 7,897
18.05.2023, 13:28
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function check-password ( $login, $password, $strength, $target )
{
 
    class passwd {
        
        [bool] $valid = $false;
        [int] $strength = 0
        [string] $target
        [int] Validate() {$false}
    }
 
    $p = New-Object passwd
 
    $p.Validate()
 
    $p      
       
}
 
$result = check-password ( $LoginText.Text, $PasswordText.Text, 2 );
$result.valid ? "Нормально" : "Уходи, ты лишний здесь";
0
Любознательный
 Аватар для YuS_2
7406 / 2256 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
18.05.2023, 15:08
Цитата Сообщение от alhaos Посмотреть сообщение
как к этому относиться
да как... наверное, как к официальной документации на инструмент, не больше, но и не меньше.

Не по теме:

Цитата Сообщение от alhaos Посмотреть сообщение
есть ведь например Креативный учёт
Он-то может и есть, но как только "творчество" начнет преобладать над законностью, то резко увеличивается вероятность смены гардероба на креативную полосатую пижамку, ну и свобода передвижения тоже может пострадать...

0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,664
Записей в блоге: 65
18.05.2023, 15:46
YuS_2,
PowerShell
1
[bool]($null) -eq [bool]("")
Code
1
True
я вот этим уже пару раз стрелял себе в ногу
0
 Аватар для volodin661
6791 / 2288 / 348
Регистрация: 10.12.2013
Сообщений: 7,897
18.05.2023, 21:45
дутая чернушенька.
зачем же ты сам, стрелок, насильственно приводишь тип ?

$null - фальшивая переменная, созданная для того, чтобы сравнивать её с обьектом на предмет
отсутствия у последнего какого либо значения.

вот так:
PowerShell
1
$null -eq ""
false

PowerShell
1
$null -eq $qweruioiuytrewertyuioiuytrewawseyu
true
1
Любознательный
 Аватар для YuS_2
7406 / 2256 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
18.05.2023, 22:58
Цитата Сообщение от alhaos Посмотреть сообщение
я вот этим уже пару раз стрелял себе в ногу
Так ведь, надо же понимать, что куда засовываешь!

Цитата Сообщение от alhaos Посмотреть сообщение
[bool]($null) -eq [bool]("")
- Ты ведь, здесь, два разных объекта, принудительно приводишь к одному типу, с конкретным значением... что, естественно, в итоге приводит к закономерному True. Такшта... читайте доки, Шура - они золотые...
0
1658 / 273 / 66
Регистрация: 03.06.2020
Сообщений: 694
19.05.2023, 01:10
Лучший ответ Сообщение было отмечено Fors1k как решение

Решение

PowerShell
1
2
[string]::IsNullOrEmpty('')
[string]::IsNullOrWhiteSpace('')
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,664
Записей в блоге: 65
19.05.2023, 06:55
о возбудились, я не о том.
PowerShell
1
2
3
($a, "", 0, "a").Where{!$_}.foreach{
    "do something"
}
Любая общая переменная которая не определилась по ходу скрипта имеет значение $null и с -not ведет себя так же как и "" и 0, я не о том что это не побороть, я о том что лично для меня это не совсем удобно.
0
Любознательный
 Аватар для YuS_2
7406 / 2256 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
19.05.2023, 10:51
Цитата Сообщение от alhaos Посмотреть сообщение
я не о том
О том, о том... просто ты иногда не до конца понимаешь, что именно делаешь. Это не проблема... вернее, её легко поправить...
"There are more things in heaven and earth, Horatio, Than are dreamt of in your philosophy." Надо просто заглянуть в документацию...
Проблема в другом... ты просто не хочешь прислушаться к нормальным советам, типа: 'а зачем, мы и сами с усами..." - так ведь?

Цитата Сообщение от alhaos Посмотреть сообщение
я о том что лично для меня это не совсем удобно
Не, ну можно ещё гланды вырезать через одно место... при большом желании... мало ли какому "доктору" как удобно...
Понимаешь о чем я?

Цитата Сообщение от alhaos Посмотреть сообщение
($a, "", 0, "a").Where{!$_}.foreach{
    "do something"
}
Вот, смотри... Что здесь ты хотел сделать в принципе, мне неведомо, но, что происходит с точки зрения кода, могу пояснить. В частности, происходит следующее:
методом .Where фильтруем коллекцию, через итерацию методом foreach, по следующим критериям:
PowerShell
1
2
3
4
-not $a
-not ""
-not 0
-not "a"
ничего сложного, ведь правда? Отсутствующая переменная, по сути - $null, ты это проверял, т.к. сам об этом написал...
Смотрим в документацию по логическому оператору -not (эквивалент !):
Операторы, использующие логические операторы, возвращают логические значения (TRUE или FALSE).
т.е. логические операторы выполняют функцию неявного приведения типа объекта.
Далее, смотрим ссылочку, что я давал выше (про booleans):
PowerShell может неявно обрабатывать любой тип как логический. Важно понимать правила, которые PowerShell использует для преобразования других типов в логические значения.

Преобразование из скалярных типов
Скалярный тип — это атомарное количество, которое может содержать только одно значение за раз.
Следующие типы оцениваются как $false:
- Пустые строки, такие как '' или ""
- Значения NULL, такие как $null
- Любой числовой тип со значением 0

Следующие типы оцениваются как $true:
- Непустые строки
- Экземпляры любого другого типа, не относящегося к коллекции

Преобразование из типов коллекций
Массивы являются наиболее распространенным типом коллекции в PowerShell. Эти правила применяются ко всем типам, похожим на коллекцию, которые реализуют интерфейс IList .
- Пустые коллекции всегда $false
- Специальное значение NULL, указывающее на отсутствие выходных данных команды, [System.Management.Automation.Internal.Au tomationNull]::Value всегда равно $false.
- Одноэлементные коллекции оцениваются по логическому значению одного и единственного элемента.
- Коллекции с более чем 1 элементом всегда являются $true.
- тут есть какие-то суперзамудреные вещи? Думаю, нет... всё достаточно понятно разжевано...
Т.е. документация определяет правильные действия программиста при использовании инструмента, а не желания и удобство для программиста...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.05.2023, 10:51
Помогаю со студенческими работами здесь

Проверка пустых полей перед закрытием формы
Доброго времени суток уважаемые форумчане! Нужна Ваша помощь в реализации следующей задумки: Имеем три таблицы, поля которых...

Проверка на наличие полей в MySQL
Приветствую. Заказчик поставил задачу: Отображать на сайте последние просмотренные объекты. Мое решение: Каждый раз, когда...

Проверка полей на наличие точки для значений Double
Имеется код для проверки и замены точки на запятую Private Function MySng(ByVal T As TextBox, Optional ByRef V As Single = 0) As...

Проверка текстовых полей на наличие натуральных чисел, проблема с реализацией
Доброго времени суток! Прошу помочь. Имеется условие: Написать программу, содержащую описание окна, построенного в качестве...

Проверка на наличие определенного класса в листе классов по одному из его полей
Есть класс Person, у него есть поля int ID и string name. Есть List<Person> lp. Каким образом узнать, есть ли в этом листе экземпляр класса...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru