Как я могу отфильтровать "OU = Сервисная учетная запись" из DistinguishedName в CSV-файле - PullRequest
0 голосов
/ 24 апреля 2020

enter image description here

Я хочу это путем импорта CSV-файла и экспорта в файл без "ou = service account" .......

1 Ответ

0 голосов
/ 25 апреля 2020

Ваш код очень близок!

Единственное, что оператор -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, но до тех пор, пока это не имеет недопустимого символы имени файла, такие как \ или :, все должно быть в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...