Для тех кто хочет почувствовать настоящим админом, в SharePoint есть интеграция с Powershell.
Всегда полезно иметь под рукой набор скриптов, которые решил собрать в одном месте..
Для изучения команд SharePoint на первом этапе будем пользоваться средой PowerShell ISE, нереально полезная оболочка для начинающих!!
Эта среда позволяет в наглядном виде получать описания команд ,а также при необходимости сохранять целые сценарии.
Запускаем PowerShell ISE и добавляем командлет SharePoint в консоли.
Add-PSSnapin Microsoft.Sharepoint.Powershell
Можно также встретить в скриптах более продвинутый вариант
If ((Get-PSSnapIn -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null )
{ Add-PSSnapIn -Name Microsoft.SharePoint.PowerShell }
Веб приложения и список сайтов
$webApp = Get-SPWebapplication 'http://london'
foreach($spSite in $webApp.Sites){if ($spSite.HostHeaderIsSiteName){ Write-Host $spSite.Url 'is host-named' }else{ Write-Host $spSite.Url 'is path based' }} Результат
Сайты на основе имени узла создаются только через Powershell, пример создания
New-SPSite 'http://portal.contoso.com' -HostHeaderWebApplication (Get-SPWebApplication 'http://london') -Name 'Portal' -Description 'Portal site' -OwnerAlias 'contosoadministrator' -language 1033 -Template 'STS#0'
New-SPSite 'http://bi.contoso.com' -HostHeaderWebApplication (Get-SPWebApplication 'http://london') -Name 'BI' -Description 'BI site' -OwnerAlias 'contosoadministrator' -language 1033 -Template 'BICenterSite#0'
Доступные шаблоны можно посмотреть командой
Get-SPWebTemplate
Небольшое
видео по настройке сайтов на основе имени
Список установленных компонентов
Get-SPFeature -Limit ALL | Where-Object {$_.Scope -eq «SITE»}
#Поиск по названию
Get-SPFeature -Limit ALL | Where-Object {$_.DisplayName -like «*Access*»}
Список доступных шаблонов сайтов
Get-SPWebTemplate | where {$_.Title -match «business»}
Список запущенных служб
Get-Service | Where-Object {$_.DisplayName -like «Sharep*»}
Теущая версия фермы с
(get-spfarm).buildversion
Конвертация сайтов на основе пути в сайты на основе имени
Backup-SPSite http://server_name/sites/site_name -Path C:Backupsite_name.bak
Remove-SPSite –Identity http://server_name/sites/site_name –Confirm:$False
Restore-SPSite http://www.example.com -Path C:Backupsite_name.bak -HostHeaderWebApplication http://server_name
Создать новый сайт
New-SPWeb -Url http://portal.contoso.com/TestSite -AddToQuickLaunch -AddToTopNav -Name TestSite -Template STS#0 -UseParentTopNav
Создать список на сайте
$w= Get-SPWeb -Identity http://portal.contoso.com/TestSite
$w.Lists.Add(«Project Tasks»,«» , «Tasks»)
Экспорт сайтов, библиотек, списков
Export-SPWeb -identity «http://dev.contoso.com» –path «C:Export_dev_contoso.cmp» -includeUserSecurity –Force
Export-SPWeb -identity «http://dev.contoso.com» -ItemUrl «/Contracts» -path «C:Export_Contracts.cmp» -includeUserSecurity –Force
Импорт сайтов, библиотек, списков из cmp файла (Content migration package)
Import-SPWeb -identity «http://dev.contoso.com» -path «c:Export_contracts.cmp»
Сделать Бэкап фермы, сайта
Backup-SPFarm -BackupMethod Full -Directory E:FarmBackup2016_09_01 –Force
Backup-SPSite http://london/sites/demosite -Path C:Backupsite_name.bak
Восстановить удаленный сайт
Get-SPDeletedSite | select Path , siteid
Restore-SpDeletedSite –Identity 4bff0c0e-4d56-4fec-8174-a60a16daeaac)
Включить расширенное логирование
Set-SPLogLevel -TraceSeverity VerboseEx -EventSeverity Verbose
Merge-SPLogFile -Path «C:FarmMergedLog.log» -Overwrite -StartTime (Get-Date).AddMinutes(-15)
#детальное описание ошибки по correlation ID
Merge-SPlogfile –Path c:log.log –Correlation ba05e237-0680-403a-b9f6-e49f96ac55d4
Отключаем расширенное логирование
Clear-SPLogLevel
Список баз контента
Get—SPDatabase | ?{$_.type —like«*business*»}
Подготовить базу для обновления
(Get-SPDatabase | ?{$_.type -like «*business*»}).Provision()
Проверить базу данных контента на ошибки
Test-SPContentDatabase -name WSS_Content –webapplication http://london
Обновление конфигурации исправление ошибок обновления
1. Запускать в командной строке под администратором
2. Меняем путь на C:Program FilesCommon Filesmicrosoft sharedWeb Server Extensions15BIN
3. Для исправления ошибок
патчей
PSConfig.exe -cmd upgrade -inplace b2b -force -cmd applicationcontent -install -cmd installfeatures Создать список и элемент списка
$w = Get-SPWeb «http://portal.contoso.com/Testsite»
$w.ListTemplates | Select name , type , type_client, Description
$l = $w.Lists.Add(«Project A Tasks» , «» , «Tasks»)
$l = $w.Lists.Add(«Test Survey» , «» , «Survey»)
$list = $w.Lists[«Project A Tasks»]
$newItem = $list.AddItem()
$newItem[«Title»] = «Task 4»
$newItem[«Due Date»] = «6/20/2015 11:27 AM»
$newItem[«% Complete»] = 500
$newItem.Update()
Подробно как изменять столбцы любого типа на сайте
МС#список столбцов
$l.Fields | select Title , Type , StaticName
Создать библиотеку и загрузить файл
$DocLibName = «Files 2016»
$lib = $w.Lists.Add(
$DocLibName,«», $w.ListTemplates[«Document Library»])
$file = Get-ChildItem «C:Sharedday2.docx»
$folder = $w.GetFolder($DocLibName )
$files = $folder.Files
$timestamp = Get-Date -UFormat «%Y%m%d_%H%M%S»
$fileName = [io.path]::GetFileNameWithoutExtension($file)
$ext = [io.path]::GetExtension($file)
#имя файла должно быть уникальным
$f =$files.Add($DocLibName+ «/» + $fileName+ «_»+$timestamp+$ext,$file.OpenRead(),$false)
#обновить значение поля
$f.Properties[«TestColumn»] = «ABC»
$f.Update()
Update()
#Обновялет элемент в базе данных
#Обновляет поля «Modified» и «Modified by» .
#Создает новую версию
Systemupdate()
#Обновялет элемент в базе данных
#НЕ обновляет поля «Modified» и «Modified by» .
#НЕ создает новую версию
#Запускает системные обработчики
UpdateOverwriteVersion()
#Обновляет элемент но не созлает новую версию.
#Обновялет поля «Modified» и «Modified by» .
Загрузить файл с удаленной машины Добавить столбец в список и представление
$w = Get-SPWeb «http://portal.contoso.com/Testsite»
$DocLibName = «Files 2016»
$lib = $w.Lists[$DocLibName]
$spFieldType = [Microsoft.SharePoint.SPFieldType]::Text
$lib.Fields.Add(«TestColumn»,$spFieldType,$false)
$lib.Update()
$v = $lib.Views[«All Documents»]
$spField = $lib.Fields[«TestColumn2»]
$v.ViewFields.Add($spField)
$v.Update()
Создать группу на сайте
$groupName = «Files 2016 Visitors»
#создаем группу на сайте
$group = $w.SiteGroups.Add($groupName, $w.EnsureUser(«contosoadministrator») , $w.EnsureUser(«contosoadministrator») , «Read Only Group»)
Выдать уникальные права на сайт, библиотеку или список
#прекратить наследование прав
$w.BreakRoleInheritance($true)
$lib.BreakRoleInheritance($true)
$list.BreakRoleInheritance($true)
#создаем назначение ролей, связываем группу и роль
$roleAssignment = new-object Microsoft.SharePoint.SPRoleAssignment($group)
# $w.RoleDefinitions | select name, description,basepermissions
$roleDefinition = $w.RoleDefinitions[«Read»]
#добавляем роль к назначению
$roleAssignment.RoleDefinitionBindings.Add($roleDefinition)
#Выдаем права например на сайт или на библиотеку
$w.RoleAssignments.Add($roleAssignment)
$lib.RoleAssignments.Add($roleAssignment)
$list.RoleAssignments.Add($roleAssignment)
$lib.Update()
$list.Update()
Добавить пользователя в группу
$user=$w.EnsureUser(«contosochen»)
#Get group object
$group=$w.SiteGroups[$groupName]
#add user to group
$group.AddUser($user)
#Получить список пользователей из AD
Import-Module activedirectory
Get-ADUser -Filter {Enabled -eq «True»} | Select-Object SamAccountName,Name,Surname,GivenName | Format-Table
Обновить поле списка
$w = Get-SPWeb «https://sp»
$l = $w.Lists[«План по оцифровке»]
foreach($item in $l.Items) {
$item[«Дата выполнения»] = $item[«Дата выдачи»]
$item.Update()}
Получить элементы списка
$w = Get-SPWeb «http://portal.contoso.com/Testsite»
$l = $w.Lists[«Project A Tasks»]
foreach($item in $l.Items) {«Title: {0} Due date: {1} , Created: {2} « -f $item[«Title»] , $item[«Due Date»] , $item[«Created By»] }
$L.Items | select Title, @{Label=”DueDate”;Expression={$_[“DueDate”]}} , @{Label=”PercentComplete”;Expression={$_[“PercentComplete”]}} | Export-Csv -path $path
#Экспортировать элементы списка в CSV
$path =»C:SharedTasks_export.csv»
$list = $w.Lists[«Project A Tasks»]
$list.Items | select Title , «Due Date» | Export-Csv -path $path
Получить элементы списка используя CAML запрос
If ((Get-PSSnapIn -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null )
{ Add-PSSnapIn -Name Microsoft.SharePoint.PowerShell }
$w = Get-SPWeb «http://portal.contoso.com/Testsite»
$l = $w.Lists[«Project A Tasks»]
$query = New-Object Microsoft.SharePoint.SPQuery
$query.Query = «0.05«
$query.ViewFields = ««
$query.ViewAttributes = «Scope=»»Recursive»»»
$query.RowLimit = 0
$ListItems = $l.GetItems( $query)
foreach($item in $ListItems) {«Title: {0} Due date: {1} , Priority: {2} ,PercentComplete:{3} , Editor: {4}» -f $item[«Title»] , $item[«Due Date»] , $item[«Priority»] , $item[«PercentComplete»] , $item[«Editor»] }
Для подготовки CAML запроса можно использовать утилиту SP CAML Query Helper 2013
Загрузить список из csv файла
$w = Get-SPWeb «http://portal.contoso.com/Testsite»
$list = $w.Lists[«Project A Tasks»]
$tblData = Import-CSV «C:SharedTasks.csv»
foreach ($row in $tblData)
span>
{
«Adding entry for «+$row.«Title».ToString()
$newItem = $list.AddItem()
$newItem[«Title»] = $row.«Title».ToString()
$newItem[«Due Date»] = $row.«Due Date».ToString()
$newItem[«% Complete»] = $row.«PercentComplete».ToString()
$newItem.Update()
}
#Получить таблицу из базы
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = «Server=$server;Database=$database;Integrated Security=True»
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = » sp_helpdb»
$SqlCmd.Connection = $SqlConnection
$SqlCmd.CommandTimeout = 0
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$tblData = $DataSet.Tables[0]
Как сохранить элемент в таблицу
Удалить элементы списка
$w = Get-SPWeb «http://portal.contoso.com/Testsite»
$l = $w.Lists[«Project A Tasks»]
$query = New-Object Microsoft.SharePoint.SPQuery
$query.Query = ««
$query.ViewFields = ««
$query.ViewAttributes = «Scope=»»Recursive»»»
$query.RowLimit = 0
$ListItems = $l.GetItems( $query)
for ($x=$ListItems.Count—1;$x -ge 0; $x—)
{
Write-Host(«DELETED: « + $listItems[$x].Item(«ID»))
$listItems[$x].Delete()
}
Реактивировать RBS
$cdb = Get-SPContentDatabase –WebApplication http://sharepoint/
$rbss = $cdb[0].RemoteBlobStorageSettings
$rbss.Enable()
Управление оповещениями
Подробно
тутНастройка собственных шаблонов
оповещений
$SPweb = Get-SPWeb «https://sharepoint.com»
foreach($alert in $SPweb.Alerts) {if ($alert.Title -eq 'Документы оповещения') {write-host $alert.Title}}
$SPweb.Alerts | Export-Csv C:temp2alerts.csv -encoding utf8
$SPlist = $SPweb.lists[«Документы»] $IDS = «» foreach($alert in $spweb.alerts) { if($alert.ListID -eq $SPlist.ID -and $alert.Title -eq 'Документы') { $IDS += $alert.ID.tostring() + «|» } write-host -nonewline «*» } write-host «deleting…» foreach($s in $IDS.Split(«|»)) { write-host -nonewline «*» write-host [GUID]$s # $spweb.alerts.delete([GUID]$s) }Найти списки с анонимным доступом
$site = Get-SPSite «https://sp»
foreach ($web in $site.AllWebs) {foreach($list in $web.lists) {if ($web.AnonymousState.tostring() -eq «Enabled» -and $list.AnonymousPermMask.tostring() -ne «OpenWeb» -and $list.AnonymousPermMask.tostring() -ne «EmptyMask» -and $list.Title -ne «TaxonomyHiddenList» ) {write-host $web.Url ,$list.Title , $list.AnonymousPermMask.tostring() ,$web.AnonymousState.tostring(),$web.AllowAnonymousAccess.tostring() ,$web.AnonymousPermMask64.tostring() }}}
Проверить SSID пользователя
$domain = «domain»;
$user_name = «user1»;
$application = «https://sharepoint.com»;
$userID = $domain + «» + $user_name;
$SPuser = Get-SPUser -Identity $userID -Web $application
$objUser = New-Object System.Security.Principal.NTAccount($domain, $user_name)
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
Write-Host '———————————-'
$SPuser.sid
$strSID.Value
Создать группу на основе группы AD
$SiteCollection = "http://site/sitecollection"
$ADGroupName = "domainadgroup"
$SPGroupName = "My Test Group A1"
$SPGroupDescription = "Test Group A1’s Description"
$SPGroupPermission = "Read"
#Start of script
$site = Get-SPWeb $SiteCollection
#Check if the group already exists
if ($site.SiteGroups[$SPGroupName] -eq $null)
{
#Ensure Group/User is part of site collection users beforehand and add them if needed
$site.EnsureUser($ADGroupName)
# Get the AD Group/User in a format that PowerShell can use otherwise there will be a string error
$ADGroupSPFriendly = $site | Get-SPUser $ADGroupName
#Create the SharePoint Group – Group Name, Group Owner, Group Member, Group Description. Can’t add AD group yet…
$NewSPGroup = $site.SiteGroups.Add($SPGroupName, $site.CurrentUser, $site.CurrentUser, $SPGroupDescription)
$site.AssociatedGroups.Add($site.SiteGroups[$SPGroupName]);
$NewSPAccount = $site.SiteGroups[$SPGroupName]
#Assign the Group permission
$GroupAssignment = New-Object Microsoft.SharePoint.SPRoleAssignment($NewSPAccount)
$GroupRole = $site.RoleDefinitions[$SPGroupPermission]
$GroupAssignment.RoleDefinitionBindings.Add($GroupRole)
$site.RoleAssignments.Add($GroupAssignment)
#Add the AD Group/User to the group, can’t be done during group creation when using Powershell otherwise errors so is done now.
Set-SPUser -Identity $ADGroupSPFriendly -Web $SiteCollection -Group $SPGroupName
}
$site.Dispose()
}