Ваш код очень близок!
Единственное, что оператор -notcontains
предназначен для поиска элементов в массиве и не должен использоваться в одиночных строках. То же самое касается -contains
, -in
, -notin
. Все это работает с массивами.
То, что должно работать, это использование оператора регулярных выражений -notmatch
.
Поскольку это регулярное выражение, вы должны знать, что строка для поиска может содержать символы, которые имеют особое значение в регулярном выражении, например, точка. В вашем случае такого символа нет, но если он есть, вам нужно выполнить [regex]::Escape()
в строке для поиска.
Import-CSV "C:\temp\temp.csv" |
Where-Object { $_.DistinguishedName -notmatch ",OU=Service Account," } |
Export-Csv "C:\temp\$date-$domain.csv" -NoTypeInformation
Или с помощью оператора -notlike
с подстановочными знаками *
по обе стороны строки:
Import-CSV "C:\temp\temp.csv" |
Where-Object { $_.DistinguishedName -notlike "*OU=Service Account,*" } |
Export-Csv "C:\temp\$date-$domain.csv" -NoTypeInformation
Путаницу с -contains
или -notcontains
легко создать, поскольку строковый объект имеет метод .Contains()
и, да, работает на указанной вами строке. Следовательно, это также должно работать для вас:
Import-CSV "C:\temp\temp.csv" |
Where-Object { !($_.DistinguishedName.Contains(",OU=Service Account,")) } |
Export-Csv "C:\temp\$date-$domain.csv" -NoTypeInformation
Надеюсь, это поможет
PS Вы не показываете, что находится внутри переменной $date
, но до тех пор, пока это не имеет недопустимого символы имени файла, такие как \
или :
, все должно быть в порядке.