在Sharepoint库中,我们有一个自定义字段,即多用户字段,该库存储员工图片。但是有时候人们会离开公司,我们需要删除他们的照片。
我创建了一个脚本,该脚本执行以下步骤:
Sharepoint这样存储多人字段的问题:
"ajax": {
"error" = function (jqXHR, textStatus, error) {
if (jqXHR && jqXHR.status == 440) {
// Session expired - do something here
} else if (jqXHR && jqXHR.status == 408) {
// Request timeout - do something here
} else {
// Some other error - do something here
}
}
所以,我要做的是与比赛进行比较,但是我没有得到想要的结果。
示例结果:
57;#JohnSmith 56;#Johanna Smith
第一个结果是确定。
但是第二个结果是这样的:
56;#John Smith
Picture1_2012_09_07_123jpg.jpg + + 56;#John Smith
我的脚本:
WilliamGates_1jpg.jpg + + 056;#William Gates (Not OK)
JeanClaudeVanDamme_2011_05_24__112jpg.jpg + + 560;#JeanClaudeVanDamme (Not OK)
答案 0 :(得分:2)
我可能会采用另一种方法,即拆分多用户字符串。在您的示例中,这很麻烦,因为用户之间用空格隔开,但也可以包含空格。因此,我们必须将其与字符串开头的可预测模式结合使用,以获得可用于拆分的正则表达式。
我将示例输入字符串修改为以下内容进行测试:
57;#JohnSmith 56;#Johanna Smith 59;#Alexander Graham Bell 060;#Persona Non Grata
We can use this regex pattern to split the string: \s(?=\d+;#)
如果您查看该链接并单击“拆分列表”,则会看到以下内容:
57;#JohnSmith
56;#Johanna Smith
59;#Alexander Graham Bell
060;#Persona Non Grata
\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 将多用户字段存储为单个字符串似乎不太可能,其中多个条目之间用空格 隔开,并且条目本身可以包含空格。也许您已经可以将其作为数组获取?也许您可以单独获取ID并进行某种直接比较?试一试用于查询SharePoint的对象和选项,看看是否可以简单一些。