В PowerShell существует множество способов отменить набор критериев, но наилучший способ зависит от ситуации.Использование одного метода отрицания в любой ситуации иногда может быть очень неэффективным.Если вы хотите вернуть все элементы, которые не были библиотеками DLL старше 05.01.2011, вы можете выполнить:
#This will collect the files/directories to negate
$NotWanted = Get-ChildItem *.dll| Where-Object {$_.CreationTime -lt '05/01/2011'}
#This will negate the collection of items
Get-ChildItem | Where-Object {$NotWanted -notcontains $_}
Это может быть очень неэффективно, поскольку каждый элемент, проходящий через конвейер, будет сравниваться с другим наборомпредметов.Более эффективный способ получить тот же результат заключается в следующем:
Get-ChildItem |
Where-Object {($_.Name -notlike *.dll) -or ($_.CreationTime -ge '05/01/2011')}
Как сказал @riknik, проверьте:
get-help about_operators
get-help about_comparison_operators
Кроме того, многие командлеты имеют параметр "Исключить".
# This returns items that do not begin with "old"
Get-ChildItem -Exclude Old*
Чтобы сохранить результаты в массиве, который вы можете сортировать, фильтровать, использовать повторно и т. Д.: * 10101 *
# Wrapping the command in "@()" ensures that an array is returned
# in the event that only one item is returned.
$NotOld = @(Get-ChildItem -Exclude Old*)
# Sort by name
$NotOld| Sort-Object
# Sort by LastWriteTime
$NotOld| Sort-Object LastWriteTime
# Index into the array
$NotOld[0]