先讓我來看一下我們有哪些列表模板可以使用,我們可以在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()
>>}