Архив метки: SharePoint

Несколько доменов в Sharepoint. Лес, трасты и тд.

Когда пользователи SharePoint находятся в нескольких доменах добавить пользователей из домена с трастовыми отношениями не проблема.
В данной ситуации выручит команда
stsadm -o setproperty -pn peoplepicker-searchadforests
Детальное описание тут
Достаточно выполнить 3 простых шага.
1. Зайти на любой сервер фермы SharePoint, открыть командную консоль SharePoint
2. Получить URL  нужного веб приложения командой
Get-SPWebApplication
3. Запустить эту команду для вашего приложения с полученным URL выше

Для полного траста 

stsadm -o setproperty -pn peoplepicker-searchadforests -pv «forest:MY-DOMAIN.local;forest:TRUSTED-DOMAIN.local;domain:MY-DOMAIN.local;domain:TRUSTED-DOMAIN.local» -url http://my-sp2013-site.com.au/

Для одного домена 

STSADM.exe -o setproperty -propertyname peoplepicker-searchadforests -propertyvalue «domain:test.com;forest:uganda.com,ugandauser,123456» -url  http://sharepoint.com
Также можно проверить свойство командой
STSADM.exe -o getproperty -propertyname peoplepicker-searchadforests -url http://sharepoint.com
Теперь у вас есть возможность добавлять в разрешения сайта , библиотек  пользователей из другого домена.

PS:
Если лес или домен, где установлен SharePoint 2013, имеет одностороннее отношение доверия с другим лесом или доменом,
необходимо задать данные учетной записи, которая проходит проверку подлинности в лесу или на домене для получения запроса, прежде чем вы сможете использовать свойство Stsadm peoplepicker-searchadforests.
STSADM -o setapppassword –password
Ниже полный пример,
Перегружать ничего не надо все должно заработать автоматически, для контроля ищем пользователя, находим и радуемся.

Автор: Roman D
Дата публикации: 2017-04-20T08:09:00.001-07:00

Полезные скрипты для Sharepoint на Powershell

Для тех кто хочет почувствовать настоящим админом, в  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' }
}

Результат
Коллекции сайтов могут быть 2х типов, сайт на основе пути (http://london/sites/demosite  по пути веб приложения создаются под сайты), и сайт на основе имени узла ( http://portal.contoso.com любое красивое имя для сайта )
Подробно на сайте Майкрософт
Сайты на основе имени узла создаются  только через 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
Список баз контента 
GetSPDatabase | ?{$_.typelike«*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)
{
   «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.Count1;$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()
}

Автор: Roman D
Дата публикации: 2016-09-08T07:16:00.001-07:00

Экпресс доступ к данным в Sharepoint

Как быстро получить данные из списка SharePoint не пользуясь веб сервисами.
Самый быстрый способ получить их это конечно  нажать кнопку Экспорт в Excel и Бинго.
Посмотрим что скрывается за этой выгрузкой. Откроем файл подключения
В нем можно найти все реквизиты и параметры
http://сайт/_vti_bin/owssvr.dll?XMLDATA=1&List={2187857A-977C-43F6-BF4A-0D10A8410A41}&View={3BD82CF2-EA85-4CD3-81B8-17150794A091}&RowLimit=0&RootFolder=%2fLists%2fList7
Selection={2187857A-977C-43F6-BF4A-0D10A8410A41}-{3BD82CF2-EA85-4CD3-81B8-17150794A091}
EditWebPage=
Formatting=None
PreFormattedTextToColumns=True
ConsecutiveDelimitersAsOne=True
SingleBlockTextImport=False
DisableDateRecognition=False
DisableRedirections=False
SharePointApplication=http://сайт/_vti_bin
SharePointListView={3BD82CF2-EA85-4CD3-81B8-17150794A091}
SharePointListName={2187857A-977C-43F6-BF4A-0D10A8410A41}
RootFolder=/Lists/List7
Как видим используется вызов RPC,
Немного информации  SharePoint Foundation RPC Protocol 
{0} – ссылка на сайт.  Корневой или любой подсайт.
{1} –GUID списка
Также можно использовать представления для выгрузки данных
таким образом наша ссылка в усеченном варианте  будет иметь вид
Результат можно непосредственно проверить в браузере
Ну а дальше XML можно использовать в скрипте на свое усмотрение.

PS:

На самом деле этот способ не всегда удобен и имеет свои ограничения, однако наглядный и простой.

 

Для остальных случаев есть  RESTJSOM or SOAP Services.
Пример ниже демонстрирует как получить элементы из списка использую  SharePoint REST API:
function getListItems(webUrl, listName, success, failure) {
    var url = webUrl + «/_vti_bin/listdata.svc/» + listName;
    $.ajax({
        url: url,
        method: «GET»,
        headers: { «Accept»: «application/json; odata=verbose» },
        success: function (data) {
            success(data.d.results);
        },
        error: function (data) {
            failure(data.responseJSON.error);
        }
    });
}
//Usage
getListItems(‘https://contoso.sharepoint.com/project/’, ‘Tasks’, function (taskItems) {
    console.log(taskItems);
    for (var i = 0; i < taskItems.length; i++) {
        console.log(taskItems[i].TaskName);
    }
},
  function (error) {
      console.log(JSON.stringify(error));
  }
);

 

Автор: Roman D
Дата публикации: 2016-05-17T04:24:00.000-07:00

Как быстро установить патч на SharePoint

Как быстро установить патч на SharePoint или почему обновление может устанавливаться 5 часов.  
Подробности тут.
Если вкратце необходимо отключить службы  SPTimerV4, IISAdmin, OSearch15, SPSearchHostController перед установкой патча и включить после установки.
1. Отключаем службы  IISAdmin и SPTimerV4
2. Выключаем службы IIS Admin и Timer Services если они запущены                                                                                                           
3. Если необходимо делаем паузу в службе поиска , см детали в cкрипте
4. Останавливаем  службы поиска Search Services, см детали в скрипте
5. Устанавливаем патч в пассивном режиме
Примечание:  Power Shell должен оставаться открытым в фоне пока выполняется патч
6. После выполнения патча, Power Shell скрипт, восстанавливает запуск служб в  на шаге 1 в автоматический
7. Запускаем службы IIS Admin и Timer
8. Запускаем службы поиска Search Services                                                                                                                                                                                      
9. Возобновляем службы поиска если остановили Search Service Application
10. В конце скрипт отображает время начала и завершения патча  и затраченное время
После установки патча  запускаем вручную Sharepoint configuration wizard или

1.) заходим в папку «C:Program FilesCommon FilesMicrosoft SharedWeb Server Extensions15BIN»
2.) И запускаем конфигурирование PSConfig.exe -cmd upgrade -inplace b2b -force -cmd applicationcontent -install -cmd installfeatures

###########################
##Ensure Patch is Present##
###########################
$patchfile = Get-ChildItem | where{$_.Extension -eq «.exe»}
if($patchfile -eq $null)
{
  Write-Host «Unable to retrieve the file.  Exiting Script» -ForegroundColor Red
  Return
}
########################
##Stop Search Services##
########################
##Checking Search services##
$srchctr = 1
$srch4srvctr = 1
$srch5srvctr = 1
$srv4 = get-service «OSearch15»
$srv5 = get-service «SPSearchHostController»
If(($srv4.status -eq «Running») -or ($srv5.status-eq «Running»))
  {
    Write-Host «Choose 1 to Pause Search Service Application» -ForegroundColor Cyan
    Write-Host «Choose 2 to leave Search Service Application running» -ForegroundColor Cyan
    $searchappresult = Read-Host «Press 1 or 2 and hit enter» 
    Write-Host
   
   if($searchappresult -eq 1)
    {
        $srchctr = 2
        Write-Host «Pausing the Search Service Application» -foregroundcolor yellow
        Write-Host «This could take a few minutes» -ForegroundColor Yellow
        $ssa = get-spenterprisesearchserviceapplication
        $ssa.pause()
    }
   
    elseif($searchappresult -eq 2)
    {
        Write-Host «Continuing without pausing the Search Service Application»
    }
    else
    {
        Write-Host «Run the script again and choose option 1 or 2» -ForegroundColor Red
        Write-Host «Exiting Script» -ForegroundColor Red
        Return
    }
  }
Write-Host «Stopping Search Services if they are running» -foregroundcolor yellow
if($srv4.status -eq «Running»)
  {
    $srch4srvctr = 2
    set-service -Name «OSearch15» -startuptype Disabled
    $srv4.stop()
  }
if($srv5.status -eq «Running»)
  {
    $srch5srvctr = 2
    Set-service «SPSearchHostController» -startuptype Disabled
    $srv5.stop()
  }
do
  {
    $srv6 = get-service «SPSearchHostController»
    if($srv6.status -eq «Stopped»)
    {
        $yes = 1
    }
    Start-Sleep -seconds 10
  }
  until ($yes -eq 1)
Write-Host «Search Services are stopped» -foregroundcolor Green
Write-Host
#######################
##Stop Other Services##
#######################
Set-Service -Name «IISADMIN» -startuptype Disabled
Set-Service -Name «SPTimerV4» -startuptype Disabled
Write-Host «Gracefully stopping IIS W3WP Processes» -foregroundcolor yellow
Write-Host
iisreset -stop -noforce
Write-Host «Stopping Services» -foregroundcolor yellow
Write-Host
$srv2 = get-service «SPTimerV4»
  if($srv2.status -eq «Running»)
  {$srv2.stop()}
Write-Host «Services are Stopped» -ForegroundColor Green
Write-Host
Write-Host
##################
##Start patching##
##################
Write-Host «Patching now keep this PowerShell window open» -ForegroundColor Magenta
Write-Host
$starttime = Get-Date
$filename = $patchfile.basename   
Start-Process $filename
Start-Sleep -seconds 20
$proc = get-process $filename
$proc.WaitForExit()
$finishtime = get-date
Write-Host
Write-Host «Patch installation complete» -foregroundcolor green
Write-Host
##################
##Start Services##
##################
Write-Host «Starting Services Backup» -foregroundcolor yellow
Set-Service -Name «SPTimerV4» -startuptype Automatic
Set-Service -Name «IISADMIN» -startuptype Automatic
##Grabbing local server and starting services##
$servername = hostname
$server = get-spserver $servername
$srv2 = get-service «SPTimerV4»
$srv2.start()
$srv3 = get-service «IISADMIN»
$srv3.start()
$srv4 = get-service «OSearch15»
$srv5 = get-service «SPSearchHostController»
###Ensuring Search Services were stopped by script before Starting»
if($srch4srvctr -eq 2)
{
    set-service -Name «OSearch15» -startuptype Automatic
    $srv4.start()
}
if($srch5srvctr -eq 2)
{
    Set-service «SPSearchHostController» -startuptype Automatic
    $srv5.start()
}
###Resuming Search Service Application if paused###
if($srchctr -eq 2)
{
    Write-Host «Resuming the Search Service Application» -foregroundcolor yellow
    $ssa = get-spenterprisesearchserviceapplication
    $ssa.resume()
}
Write-Host «Services are Started» -foregroundcolor green
Write-Host
Write-Host
Write-Host «Script Duration» -foregroundcolor yellow
Write-Host «Started: « $starttime -foregroundcolor yellow
Write-Host «Finished: « $finishtime -foregroundcolor yellow
Write-Host «Script Complete»
+ Небольшое видео по Powershell

Полезные ссылки, тут

Список всех CU

Автор: Roman D
Дата публикации: 2016-05-06T02:10:00.001-07:00

Как узнать версию Sharepoint

Как узнать версии  продуктов SharePoint достаточно запустить скрипт  get_sp_ver.ps1
Param(
  # decide on whether all the sub-components belonging to the product should be shown as well
  [switch]$ShowComponents
)
# location in registry to get info about installed software
$RegLoc = Get-ChildItem HKLM:SoftwareMicrosoftWindowsCurrentVersionUninstall
# Get SharePoint Products and language packs
write-host «Products and Language Packs»
write-host «——————————————-«
$Programs = $RegLoc |
       where-object { $_.PsPath -like «*Office*» } |
       foreach {Get-ItemProperty $_.PsPath}
$Components = $RegLoc |
       where-object { $_.PsPath -like «*1000-0000000FF1CE}» } |
       foreach {Get-ItemProperty $_.PsPath}
# output either just the info about Products and Language Packs
# or also for sub components
if ($ShowComponents.IsPresent)
{
       $Programs | foreach {
             $_ | fl  DisplayName, DisplayVersion;
             $productCodes = $_.ProductCodes;
             $Comp = @() + ($Components |
                    where-object { $_.PSChildName -in $productCodes } |
                    foreach {Get-ItemProperty $_.PsPath});
             $Comp | Sort-Object DisplayName | ft DisplayName, DisplayVersion -Autosize
       }
}
else
{
       $Programs | fl DisplayName, DisplayVersion
}

Результат

Автор: Roman D
Дата публикации: 2016-05-06T01:43:00.001-07:00