从PowerShell读取Sharepoint List计算字段

时间:2014-07-14 14:47:12

标签: list sharepoint

我正在尝试从SharePoint列表中提取数据。该字段是一个计算列,它接受是或否答案,并将单词更改为已存档和未存档。 我可以在IE的计算列中看到正确格式化的数据,但是当我尝试拉取数据时,当我检查变量数据时,它显示为什么都没有。

$site = get-spsite https://extranet./sites/site
$web = get-spweb -Identity https://extranet/sites/site
$list=$web.getlist("https://extranet/sites/site/lists/List");
$View = $list.Views["LISTVIEW"]
$listitems = $list.Getitems($view) 

foreach ($listitem in $listitems) {

我也试过这个,但得到索引一个空变量错误。

$mailboxdb = $listitem.Fields["mailboxdb"] -as [Microsoft.SharePoint.SPFieldCalculated];            
$mailboxdb.GetFieldValueAsText($listitem["mailboxdb"]);

我在$ listitems输出中也看到了这一点。 ows_MailboxDb ='string; #Archived'

但是当我检查$ mailboxdb时它是空的。

找到了这个,但我不知道存储结果意味着什么。

在Powershell中,虽然您可以在脚本中引用列表中的任何字段,但您只能比较“静态”字段中的检索值 - 也就是说,您不能使用计算字段。 PowerShell不会抱怨 - 但是你的脚本不会得到结果。这是因为Sharepoint的.Net库不会为您进行字段计算 - 这只发生在Sharepoint UI本身内。

如果您需要访问“计算”字段,实际上您需要有两个字段 - 计算字段(通常是隐藏)和“存储结果”字段,必须从最后一个计算值更新“更新”工作流程的步骤。然后,您可以使用PowerShell中的“存储值”字段 - 以及顺便提一下,在Sharepoint中的View计算中。

1 个答案:

答案 0 :(得分:0)

你基本上有两个选择。你可以让Powershell为你做计算,考虑到计算的基本性质,这可能是两个选项中较简单的。

在帖子末尾提到的第二个选项是创建一个可以存储计算结果的新字段。在您的情况下,您可以将其称为状态。然后,您将创建一个工作流,该工作流在更新或创建列表项时运行,该列表项将计算字段的结果存储在结果字段中。如果除了在PowerShell脚本中使用计算字段的值之外没有其他原因,这对我来说似乎是多余的。