先让我来看一下我们有哪些列表模板可以使用,我们可以在SPWeb对象下使用ListTemplates参数来设置列表模板。首先,让我们先来初始化一个SPWeb的对象。
PS>$spWeb=Get-SPWeb-Identityhttp://localhost
然后,我们使用ListTemplates参数,并使用Select-Object参数,来查看我们有哪些列表模板可以使用
当我们创建一个新的列表的时候可以使用这些的列表模板。当我们要在SharePoint2010中创建一个列表的时候,你需要在SPListCollection中使用Add方法。在下面的例子中我们将会使用三个参数,Title,description,这两个参数的类型是System.String,还有一个template这个参数的类型是SPListTemplateType。所以我们需要初始化一个对象来使用这些参数。
PS>$listTemplate=[Microsoft.SharePoint.SPListTemplateType]::Contacts
PS>$spListCollection=$spWeb.Lists
PS>$spListCollection.Add("My Contacts","Description",$listTemplate)
我们在使用Add方法是,一定要避免使用$spweb.Lists.Add。如果我们利用这个方法连续创建很多列表,就会重复获取网站的 lists的数据,这样会加大内存的消耗,如果指调用一次并保存在一个变量中,这样就只需要获取一次lists的数据,并可以重复使用。
使用PowerShell更新SharePoint列表
下面让我们来修改我们刚刚创建的列表,首先需要使用GetLists()方法获取到这个列表
PS>$spList=$spWeb.GetList("/Lists/My Contacts")
PS>$spList.OnQuickLaunch= "True"
PS>$spList.Update()
当我们使用了上面的命令后,列表的链接就会显示在网站的快速启动的中,如果设置了为false就会在快速启动中隐藏。如果我们要修改列表的说明信息,我们需要使用 Description参数。
PS>$spList.Description= "My Contact List"
PS>$spList.Update()
使用PowerShell向SharePoint列表中添加栏
如果要向列表中添加一个新的栏,我们就需要使用SPFieldCollection类中的Add方法。现在我们创建一个比较简单的单行文本的栏。
PS>$spFieldType=[Microsoft.SharePoint.SPFieldType]::Text
PS>$spList.Fields.Add("TextField",$spFieldType,$false)
上面使用的Add方法中有三个参数,第一个是栏的名称,第二个参数是栏的类型,这里我们使用了一个变量来保存单行文本的栏类型,第三个参数我们输入的false,这里表示的是这个新建的栏是否在保存表单时一定要输入一个值,也就是在网站创建栏选择的“要求此栏包含信息”选项。
同时SharePoint 2010 还支持其他类型的栏,如果要添加一个”选项”类型的栏时会有一些不用,因为它需要设置一些可供选择的数据。我们可以将选项栏用的到数据保存到System.Collections.Specialized.StringCollection类中,我们来看下面的例子。
PS>$choices=New-ObjectSystem.Collections.Specialized.StringCollection
PS>$choices.Add("First Choice")
PS>$choices.Add("Second Choice")
PS>$choices.Add("Third Choice")
现在我们可以使用这个变量,来创建一个类型为“Choice”类型的栏
PS>$spFieldType=[Microsoft.SharePoint.SPFieldType]::Choice
PS>$spList.Fields.Add("ChoiceField",$spFieldType,$false,$false,$choices)
使用PowerShell管理列表视图
让我们来继续看看如果利用PowerShell管理列表的视图。我们可以通过对视图定制来显示我们的需要的数据内容。当我们创建一个新的列表时,会有一个默认的视图。我们可以通过PowerShell来编辑默认的这个视图。我们可以使用GetViewFromUrl来获取视图的链接。
PS>$spView=$spWeb.GetViewFromUrl("/Lists/My Contacts/AllItems.aspx")
当我创建好一个新的栏时,它不会被添加到默认的视图中被显示。我们可以通过PowerShell将这个栏添加到这个默认视图中。我们需要先使用一个变量来保存栏。
PS>$spField=$spList.Fields["TextField"]
我们可以通过SPViewFieldCollection类中的 Add方法来向视图中添加栏,然后使用Update()方法来保存更新。
PS>$spView.ViewFields.Add($spField)
PS>$spView.Update()
你可以使用更多的方法来管理列表视图,例如,创建视图,删除视图。
使用PowerShell管理列表项目
让我们来继续看看如何向一个列表中添加一个列表项目。SPLists类提供一个AddItem的方法,我们可以使用这个方法来添加一个列表项目。当我们使用AddItem方法时,它会返回一个Microsoft.SharePoint.SPListItem的对象。因为我们需要对这个列表项目来设置每个栏数据。
PS>$spListItem=$spList.AddItem()
现在我们开始对每一个栏来设置它的数据,SPListItem类中提供一个参数化Item属性,我们可以通过这个属性设置特定栏的值。例如:
PS>$spListItem["Title"]= "New Item"
PS>$spListItem["TextField"]= "Hey hey"
PS>$spListItem["ChoiceField"]= "First Choice"
PS>$spListItem.Update()
如果要更新一个已经存在的列表项目我们该怎么做呢?SPList类中提供了很多方法可以提供给我来查找一个列表项目。最常用的命令式GetItemById() 和 GetItems()
GetItemById() 方法是在我们知道这个 item 的 id 时候可以获取到这个列表项目。但在很多时候,我们并不知道这个列表项目的 Id ,而只是知道标题,或者其他的一些栏的信息。在这个时候我们需要使用 GetItems() 这个方法。这个方法将会返回所有的列表项目或者在使用 Caml Query 定义时得到列表项目
PS>$spQuery=New-ObjectMicrosoft.SharePoint.SPQuery
SPQuery对象是用来支持Query查询的类,在这个时候我们就可以CAML Query的语句,
PS>$camlQuery=
>>‘<Where><Eq><FieldRefName="Title" /><ValueType="Text">True</Value></Eq></Where>'
PS>$spQuery.Query=$camlQuery
在我们使用GetItems方法后,我们需要使用一些参数来设置返回的Item的行数限制,如果我们没有使用行数限制的参数,在获取一些数据量很大的列表数据时,就可能会失败。
PS>$spQuery.RowLimit=100
PS>$spListItem=$spList.GetItems($spQuery)
现在我们可以通过使用GetItems()方法获取到的数据,进行编辑。GetItems方法会返回一个ListItemCollection的类型。这个时候我们需要使用ForEach-Object命令来循环获取列表数据。
PS>$spListItem|ForEach-Object{
>>$_["Title"]= "New Value";$_.Update()
>>}