Я мог бы пойти с другим подходом, который разделяет вашу многопользовательскую строку. Это проблема в вашем примере, потому что пользователи разделяются пробелами, но также могут содержать пробелы. Поэтому мы должны объединить его с предсказуемым шаблоном в начале строки, чтобы получить регулярное выражение, которое мы можем использовать для его разделения.
Я изменил вашу примерную строку ввода для тестирования:
57;#JohnSmith 56;#Johanna Smith 59;#Alexander Graham Bell 060;#Persona Non Grata
Мы можем использовать этот шаблон регулярного выражения для разбиения строки: \s(?=\d+;#)
Если вы посмотрите на эту ссылку и нажмете «Разделить список», вы увидите следующее:
57;#JohnSmith
56;#Johanna Smith
59;#Alexander Graham Bell
060;#Persona Non Grata
Что делает RegEx?
\s
- соответствует пробелу (вы можете заменить его литералом, если хотите, или пробелом \
)
(?=...)
- просмотр с нулевой шириной означает, что все, что здесь есть, должно следовать, но не считается частью матча
\d+;#
- \d+
означает одну или несколько цифр, ;#
- литералы (#
необходимо экранировать только в режиме регулярных выражений, где вы можете добавлять комментарии)
Таким образом, в общем, этот шаблон означает: «соответствовать пробелу, но только если за ним следуют 1 или более цифр, затем точка с запятой, затем хеш / фунт / октоторп (#
).
Зачем это делать?
Поскольку оператор -split
может взять регулярное выражение в качестве основы для того, когда нужно разбить строку на массив.
Зачем использовать массив?
Потому что тогда вы просто проверяете, что единственный пользователь, которого вы ищете, это в массиве:
foreach($item in $userItems)
{
$persons = $item["Persons_PDB"].ToString() -split '\s(?=\d+;#)'
if($concatenatedUser -in $persons) # or $persons -contains $concatenateduser
{
write-host $item.File.Name +" " + $item["Persons_PDB"]
}
}
Нужно ли вообще что-то делать?
Я не знаю. Без доступа к объектам сложно сказать. Но мне кажется маловероятным, что SharePoint хранит многопользовательское поле в виде одной строки, где несколько записей разделены пробелами и сами записи могут содержать пробелы. Может быть, вы уже можете получить его в виде массива? Может быть, вы можете получить идентификацию в одиночку и сделать какое-то прямое сравнение? Поиграйте с объектами и опциями, которые у вас есть для запросов к SharePoint, и посмотрите, есть ли что-то, что вы могли бы сделать более простым.