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

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

19.09.2014, 08:50. Показов 11233. Ответов 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,662
Записей в блоге: 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
7404 / 2251 / 360
Регистрация: 10.03.2016
Сообщений: 5,209
18.05.2023, 09:00
На все изыски и игры с объектами boolean, существует официальная документация:
о booleans
- вот на её основе можно и покреативить...
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,662
Записей в блоге: 65
18.05.2023, 12:19
YuS_2, я х3 как к этому относиться... ну есть и есть... есть ведь например Креативный учёт
0
 Аватар для volodin661
6671 / 2263 / 346
Регистрация: 10.12.2013
Сообщений: 7,824
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
7404 / 2251 / 360
Регистрация: 10.03.2016
Сообщений: 5,209
18.05.2023, 15:08
Цитата Сообщение от alhaos Посмотреть сообщение
как к этому относиться
да как... наверное, как к официальной документации на инструмент, не больше, но и не меньше.

Не по теме:

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

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

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

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

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

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

Решение

PowerShell
1
2
[string]::IsNullOrEmpty('')
[string]::IsNullOrWhiteSpace('')
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,662
Записей в блоге: 65
19.05.2023, 06:55
о возбудились, я не о том.
PowerShell
1
2
3
($a, "", 0, "a").Where{!$_}.foreach{
    "do something"
}
Любая общая переменная которая не определилась по ходу скрипта имеет значение $null и с -not ведет себя так же как и "" и 0, я не о том что это не побороть, я о том что лично для меня это не совсем удобно.
0
Любознательный
 Аватар для YuS_2
7404 / 2251 / 360
Регистрация: 10.03.2016
Сообщений: 5,209
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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru