#powershell
#powershell
Вопрос:
Я пытаюсь заставить несколько фильтров работать, получая список компьютеров пользователей. Мои условия таковы:
- входили в систему в течение последних 30 дней
- исключая любой сервер, работающий
- системы, исключающие серверы, начинающиеся с «Rose»
- не отключены
Кажется, это работает, отфильтровывая все, кроме имен компьютеров, которые начинаются с «Rose». Формат одинаков для всех условий. В $ time уже загружена get-date.adddays(-30). Вот мой 1-лайнер:
Get-adcomputer -filter "OperatingSystem -notlike '*server*'" -properties * |Where-Object {$_.LastLogonDate -gt $time -and ($_.Enabled -eq $true) -and ($_.name -ne 'Rose*')} |select name,lastlogondate,PrimaryGroup |Export-Csv C:Users.csv
Я попытался загрузить свойство -filter с моими условиями, но я не смог заставить работать более 1 фильтра, поэтому я переместил их в раздел where-object.
Комментарии:
1. Вам нужно использовать
-like
или-match
, если вы хотите использовать подстановочные знаки.2. Мне нужно было использовать -notlike, но да, это была проблема. Спасибо! Сделайте это ответом, а не комментарием, чтобы я мог пометить его как ответ.
3. О, да, вы правы ^^ рад, что смог помочь
Ответ №1:
Оператор -ne
не поддерживает подстановочные знаки. Со страницы справки about_operators:
Операторы сравнения также включают операторы, которые находят или заменяют шаблоны в тексте. Операторы (-match, -notmatch, -replace) используют регулярные выражения, а (-like, -notlike) — подстановочные знаки *.
Вместо этого вы должны иметь возможность использовать -notlike
or -notmatch
.