Powershell 功能函数大全
说明: 本文章讲述powershell操作大全,是笔者多时积累完成。一步步从底层网站架构搭建,到网页内容的呈现, 均由powershell完成。 考虑到网站内容框架的移植,比如从开发环境到测试环境,再到产品环境,底层框架内容可由Powershell一键部署,这样更加方便以及可维护性。考虑到项目架构搭建的异同,初步分为以下步骤:
1. Poweshell 对 Site Column的完整操作
2. Powershell 对 Content Type的完整操作
3. Powershell 对 List 的完整操作
4. Powershell 对 Web Part(页面)操作
5. Powershell 对 Security Group操作
经过以上操作, 整个空网站就搭建成功。
1. Site Column的创建
a. 创建一般类型site column
function CreateSiteColumn($siteUrl, $columnName, $type, $required, $unique){
try{
$site = new-object Microsoft.SharePoint.SPSite $siteUrl
$web = $site.RootWeb
$field = $web.Fields[$columnName]
if($field -ne $null){
$web.Fields.Delete($columnName)
$web.Update()
}
$fieldGroup = "Retail"
$columnNameR = $columnName.Replace(" ", "")
$newSiteColumn = $web.Fields.CreateNewField([Microsoft.SharePoint.SPFieldType]::$type, $columnNameR)
$newSiteColumn = $web.Fields.Add($newSiteColumn)
$field = $web.Fields[$columnNameR]
$field.Group = $fieldGroup
$field.Required = $required
$field.EnforceUniqueValues = $unique
$field.Title = $columnName
$field.Update()
$web.Update()
$site.Dispose()
LogWrite "success to create sitecolumn $columnName"
}
catch
{
LogWrite "failed to create sitecolumn $columnName"
LogWrite $_.Exception.Message
throw
}
}
b. 创建RichText类型的site column
function CreateSiteColumn-Richtext($siteUrl, $columnName, $required, $unique){
try{
$site = new-object Microsoft.SharePoint.SPSite $siteUrl
$web = $site.RootWeb
$field = $web.Fields[$columnName]
if($field -ne $null){
$web.Fields.Delete($columnName)
$web.Update()
}
$fieldGroup = "Retail"
$columnNameR = $columnName.Replace(" ", "")
$newSiteColumn = $web.Fields.CreateNewField([Microsoft.SharePoint.SPFieldType]::Note, $columnNameR)
$newSiteColumn = $web.Fields.Add($newSiteColumn)
$field = $web.Fields[$columnNameR]
$field.Group = $fieldGroup
$field.Required = $required
$field.EnforceUniqueValues = $unique
$field.Title = $columnName
$field.RichText = $true
$field.RichTextMode = "Compatible"
#Compatible,FullHtml
$field.Update()
$web.Update()
$site.Dispose()
LogWrite "success to create sitecolumn $columnName"
}
catch
{
LogWrite "failed to create sitecolumn $columnName"
LogWrite $_.Exception.Message
throw
}
}
c. 创建Calculated类型的site column
function CreateSiteColumn-Calculated($siteUrl, $columnName, [Array]$calculateds){
try{
$site = Get-SPSite $siteUrl
$web = $site.RootWeb
$field = $web.Fields[$columnName]
if($field -ne $null){
$web.Fields.Delete($columnName)
$web.Update()
}
$formula = "="
$calculateds | ForEach{
if($formula -eq "="){
$formula += "[" + $_ + "]"
}
else{
$formula += "+" +"[" + $_+ "]"
}
}
$columnNameR = $columnName.Replace(" ", "")
$fieldGroup = "Retail"
#$newSiteColumn = $web.Fields.CreateNewField($a, $columnName)
$newSiteColumn = $web.Fields.Add($columnNameR, [Microsoft.SharePoint.SPFieldType]::Calculated, $false)
$field = $web.Fields[$columnNameR]
$field.Formula=$formula
$field.OutputType="Number"
$field.Group = $fieldGroup
$field.Title = $columnName
$field.Update()
$web.Update()
$site.Dispose()
LogWrite "success to create sitecolumn $columnName"
}
catch
{
LogWrite "failed to create sitecolumn $columnName"
LogWrite $_.Exception.Message
throw
}
}
d. 创建Choice类型的site column
function CreateSiteColumn-Choice($siteUrl, $columnName, [Array] $choiceFieldChoices ){
try{
$site = Get-SPSite $siteUrl
$web = $site.RootWeb
$field = $web.Fields[$columnName]
if($field -ne $null){
$web.Fields.Delete($columnName)
$web.Update()
}
$fieldGroup = "Retail"
$columnNameR = $columnName.Replace(" ", "")
# Declare a new empty String collection
$stringColl = new-Object System.Collections.Specialized.StringCollection
# Add the choice fields from array to the string collection
$stringColl.AddRange($choiceFieldChoices)
$newSiteColumn = $web.Fields.Add($columnNameR,[Microsoft.SharePoint.SPFieldType]::Choice, $false, $false, $stringColl)
$field = $web.Fields[$columnNameR]
$field.Group = "Retail"
$field.Title = $columnName
$field.Update()
$web.Update()
$site.Dispose()
LogWrite "success to create sitecolumn $columnName"
}
catch
{
LogWrite "failed to create sitecolumn $columnName"
LogWrite $_.Exception.Message
throw
}
}
e. 创建Metadata 类型site column
function CreateSiteColumn-Metadata($siteUrl, $columnName, $fieldType, $isMulitple, $termStoreName, $termGroupName, $termSetName, $termName){
try{
#$fieldType : "TaxonomyFieldTypeMulti" ,"TaxonomyFieldType"
$site = Get-SPSite -Identity $siteUrl
$rootWeb = $site.RootWeb
$field = $rootWeb.Fields[$columnName]
if($field -ne $null){
$rootWeb.Fields.Delete($columnName)
$rootWeb.Update()
}
$fieldGroup = "Retail"
$columnNameR = $columnName.Replace(" ", "")
#Create a taxonomy field
$field = [Microsoft.SharePoint.Taxonomy.TaxonomyField]$rootWeb.Fields.CreateNewField($fieldType, $columnNameR);
#Get a taxonomy session
$session = new-object Microsoft.SharePoint.Taxonomy.TaxonomySession($site)
#Get Term Store
$termstore = $session.TermStores[$termStoreName]
#Get Term Group
$group = $termstore.Groups[$termGroupName]
#Get Term Set
$termSet= $group.TermSets[$termSetName]
#populate newly created field
$field.Sspid = $termSet.TermStore.Id
$field.TermSetId = $termSet.Id
if($termName -ne $null){
$terms = $termSet.GetAllTerms()
# Get the Term using the name
$term = $terms | ?{$_.Name -eq $termName}
$field.AnchorId = $term.Id
}
$field.AllowMultipleValues = $isMulitple
$field.Group = $fieldGroup
$field.Required = $false
$rootWeb.Fields.Add($field)
$rootWeb.Update()
$field = $rootWeb.Fields[$columnNameR]
$field.Title = $columnName
$field.Update()
#Update sp web
$rootWeb.Update()
$site.Dispose()
LogWrite "success to create sitecolumn $columnName"
}
catch
{
LogWrite "failed to create sitecolumn $columnName"
LogWrite $_.Exception.Message
throw
}
}
2 . Content Type 的创建
a. 创建congtent type
function CreateContenType($siteUrl, $contentTypeName, $parentContentType, [Array] $siteColumnNames){
try{
$spSite = Get-SPSite $siteUrl
$rootWeb = $spSite.RootWeb
$type = $rootWeb.ContentTypes[$contentTypeName]
if($type -ne $null){
$rootWeb.ContentTypes.Delete($type.Id)
$rootWeb.Update()
}
#$spWeb.AvailableContentTypes | Select Name
$parent = $rootWeb.AvailableContentTypes[$parentContentType]
$contentType = New-Object Microsoft.SharePoint.SPContentType -ArgumentList @($parent, $rootWeb.ContentTypes, $contentTypeName)
$contentType.Group = "Retail"
$rootWeb.ContentTypes.Add($contentType)
$rootWeb.Update()
$ct=$rootWeb.ContentTypes[$contentTypeName]
if($siteColumnNames -ne $null){
$siteColumnNames | ForEach {
$fieldAdd=$rootWeb.Fields[$_]
$fieldLink=New-Object Microsoft.SharePoint.SPFieldLink($fieldAdd)
$ct.FieldLinks.Add($fieldLink)
}
}
$ct.Update()
$spSite.Dispose()
LogWrite "success to create content type $contentTypeName"
}
catch{
LogWrite "faled to create content type $contentTypeName"
LogWrite $_.Exception.Messag
throw
}
}
b. 删除content type
function DeleteContenType($siteUrl){
try{
$spSite = Get-SPSite $siteUrl
$rootWeb = $spSite.RootWeb
$type = $rootWeb.ContentTypes
$type | ForEach {
if($_.Group -eq "Retail" -and $_.Name -ne "Retail Item Base" -and $_.Name -ne "Knowledge Asset"){
Write-Host $_.Name + $_.Id
$type.Delete($_.Id)
}
}
$rootWeb.Update()
$rootWeb.Update()
$spSite.Dispose()
LogWrite "success to delete content type $contentTypeName"
}
catch{
LogWrite "faled to delete content type $contentTypeName"
LogWrite $_.Exception.Messag
throw
}
}
c. 更新Document set
function UpdateDocumentSet($siteUrl, $contentTypeSet, $contentType){
$spSite = Get-SPSite $siteUrl
$rootWeb = $spSite.RootWeb
$cty = $rootWeb.ContentTypes[$contentType].Id
$dsct = $rootWeb.ContentTypes[$contentTypeSet]
$dst = [Microsoft.Office.DocumentManagement.DocumentSets.DocumentSetTemplate]::GetDocumentSetTemplate($dsct)
$dst.AllowedContentTypes.Add($cty)
$dst.AllowedContentTypes.Remove("0x0101")
$dst.Update($true)
$spSite.Dispose()
}
3. 创建list
a. 创建list
function Add-SPList([string]$url, [string]$name, [string]$type) {
try{
$spWeb = Get-SPWeb $url
# Check list is exist or not
$spList = $spWeb.Lists[$name]
$templateType = $spWeb.ListTemplates[$type]
if($spList -ne $null){
$spList.Delete()
LogWrite "success to delete the list named $name "
}
[void]$spWeb.Lists.Add($name, "", $templateType)
LogWrite "success to Add the list named $name"
}
catch{
LogWrite "failed to add list named $name"
LogWrite $_.Exception.Message
throw
}
finally{
$spWeb.Dispose()
}
}
b. 创建View
function Add-SPListViewByFields([string]$webUrl, [string]$listName, [string]$listViewName, $viewName, $fieldsNames, $query。 $scope) {
try{
$spWeb = Get-SPWeb $webUrl
$spList = $spWeb.Lists[$listName]
if($spList -eq $null){
LogWrite "list named $listName is not exsiting"
return
}
$fields = $spList.Views[$listViewName].ViewFields.ToStringCollection()
$fields.Clear()
$fieldsNames | ForEach{
$fields.Add($_)
}
$strQuery = ""
if($query -ne $null){
$strQuery = $query
}
$spList.Views.Add($viewName, $fields, $strQuery, 10, $True, $False , "HTML", $False)
$view = $spList.Views[$viewName]
#$view.Scope = "RecursiveAll"
if($scope -ne $null){
$view.Scope = $scope
}
$view.Update()
LogWrite "succes add the list view named $viewName in list $listName"
}
catch