none
Как добавить пользователя в группу "*- владельцы" на все subsites RRS feed

  • Вопрос

  • Как добавить пользователя в группу "*- владельцы" на все subsites (их около 500)

    Есть ли способ сделать это не вручную?

    Если у кого есть такой PowerShell скрипт, дайте ссылку?

    9 февраля 2012 г. 4:02

Ответы

  • Add-PSSnapin Microsoft.SharePoint.PowerShell
    $userName = "admin-pc\admin" #Имя пользователя
    $groupEnd = "владельцы" #окончание названия группы
    $webUrl = "http://mysitecollectionurl/site_its" #адрес сайта
    
    $SPWebParent= Get-SPWeb -Identity $webUrl
    foreach ($SPWeb in $SPWebParent.Webs)
    {
        foreach ( $group in $SPWeb.SiteGroups)
        {
            if ($group.Name.EndsWith($groupEnd))
            {
            $user = $SPWeb.EnsureUser($userName)
            $SPWeb.AllowUnsafeUpdates = $true;
            Set-SPUser -Identity $user  -Web $SPWeb -Group $group
            }
        }
    
    
    }
    В таком случае скрипт примет такой вид
    Еще можно рекурсивно пройтись, если у подсайтов есть свои подсайты :
    Add-PSSnapin Microsoft.SharePoint.PowerShell
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
    $userName = "admin-pc\admin" #Имя пользователя
    $groupEnd = "Owners" #окончание названия группы
    $webUrl = "http://mytestsite" #адрес сайта
    
    function AssignPremission{
    param( 
     [Parameter(
     Position = 0,
     Mandatory = $true,
     ValueFromPipeline=$true )]
     [Microsoft.SharePoint.SPWeb] $SPWebParent
     )
    
    foreach ($SPWeb in $SPWebParent.Webs)
    {
    
        foreach ( $group in $SPWeb.SiteGroups)
        {
            if ($group.Name.EndsWith($groupEnd))
            {
            $user = $SPWeb.EnsureUser($userName)
            $SPWeb.AllowUnsafeUpdates = $true;
            Set-SPUser -Identity $user  -Web $SPWeb -Group $group
            }
        }
        AssignPremission($SPweb)
    
    }
    
    }
    
    $SPWebParent= Get-SPWeb -Identity $webUrl
    AssignPremission($SPWebParent)
    

    9 февраля 2012 г. 8:20

Все ответы

  • Add-PSSnapin Microsoft.SharePoint.PowerShell
    $userName = "admin-pc\admin" #Имя пользователя
    $groupEnd = "владельцы" #окончание названия группы
    
    
    
    
    $SPWebCollection =  Get-SPWebApplication |Get-SPSite |Get-SPWeb
    foreach ($SPWeb in $SPWebCollection)
    {
        foreach ( $group in $SPWeb.SiteGroups)
        {
            if ($group.Name.EndsWith($groupEnd))
            {
            $user = $SPWeb.EnsureUser($userName)
            $SPWeb.AllowUnsafeUpdates = $true;
            Set-SPUser -Identity $user  -Web $SPWeb -Group $group
            }
        }
    
    
    }
    Строчку 
    $SPWebCollection =  Get-SPWebApplication |Get-SPSite |Get-SPWeb
    Можно заменить, например, на   
    $SPWebCollection = Get-SPSite -Identity "http://mysitecollectionurl" | Get-SPWeb
    Если необходимо взять все сайты в рамках одной сайт коллекции 

    Наверно, как-то так, времени на отладку нет,к сожалению, проверьте скрипт перед запуском.



    9 февраля 2012 г. 5:16
  • Никита, спасибо!

    У меня есть: 

    Нужный мне SPWeb http://mysitecollectionurl/site_its 

    Как указать, что бы он только добавил пользователя во все узлы с URL http://mysitecollectionurl/site_its/subsites*

    9 февраля 2012 г. 7:32
  • Add-PSSnapin Microsoft.SharePoint.PowerShell
    $userName = "admin-pc\admin" #Имя пользователя
    $groupEnd = "владельцы" #окончание названия группы
    $webUrl = "http://mysitecollectionurl/site_its" #адрес сайта
    
    $SPWebParent= Get-SPWeb -Identity $webUrl
    foreach ($SPWeb in $SPWebParent.Webs)
    {
        foreach ( $group in $SPWeb.SiteGroups)
        {
            if ($group.Name.EndsWith($groupEnd))
            {
            $user = $SPWeb.EnsureUser($userName)
            $SPWeb.AllowUnsafeUpdates = $true;
            Set-SPUser -Identity $user  -Web $SPWeb -Group $group
            }
        }
    
    
    }
    В таком случае скрипт примет такой вид
    Еще можно рекурсивно пройтись, если у подсайтов есть свои подсайты :
    Add-PSSnapin Microsoft.SharePoint.PowerShell
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
    $userName = "admin-pc\admin" #Имя пользователя
    $groupEnd = "Owners" #окончание названия группы
    $webUrl = "http://mytestsite" #адрес сайта
    
    function AssignPremission{
    param( 
     [Parameter(
     Position = 0,
     Mandatory = $true,
     ValueFromPipeline=$true )]
     [Microsoft.SharePoint.SPWeb] $SPWebParent
     )
    
    foreach ($SPWeb in $SPWebParent.Webs)
    {
    
        foreach ( $group in $SPWeb.SiteGroups)
        {
            if ($group.Name.EndsWith($groupEnd))
            {
            $user = $SPWeb.EnsureUser($userName)
            $SPWeb.AllowUnsafeUpdates = $true;
            Set-SPUser -Identity $user  -Web $SPWeb -Group $group
            }
        }
        AssignPremission($SPweb)
    
    }
    
    }
    
    $SPWebParent= Get-SPWeb -Identity $webUrl
    AssignPremission($SPWebParent)
    

    9 февраля 2012 г. 8:20
  • Еще раз большое спасибо!

    Немного подправил скрипт исправив параметр

     foreach ( $group in $SPWeb.Groups)


    10 февраля 2012 г. 2:44
  • Никита подскажите пожалуйста, как добавить пользователя на сайт (не в группу) используя уровень разрешения Полный доступ.

    ТАк как на некоторых узлах как оказалось нет группы "*- владельцы".

    10 февраля 2012 г. 7:55
  • Можно модифицировать скрипт следующим образом тогда : 
    Add-PSSnapin Microsoft.SharePoint.PowerShell
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
    $userName = "admin-pc\admin" #Имя пользователя
    $userMail = "mail@mail.ru"
    $userDisplayName = "admin"
    #$groupEnd = "Owners" #окончание названия группы
    $webUrl = "http://mytestsite" #адрес сайта
    
    function AssignPremission{
    param( 
     [Parameter(
     Position = 0,
     Mandatory = $true,
     ValueFromPipeline=$true )]
     [Microsoft.SharePoint.SPWeb] $SPWebParent
     )
    
    foreach ($SPWeb in $SPWebParent.Webs)
    {
        $SPWeb.Roles["Полный доступ"].AddUser($userName,$mail,$userDisplayName,"")
        #foreach ( $group in $SPWeb.SiteGroups)
        #{
            #if ($group.Name.EndsWith($groupEnd))
            #{
            #$user = $SPWeb.EnsureUser($userName)
            #$SPWeb.AllowUnsafeUpdates = $true;
            #Set-SPUser -Identity $user  -Web $SPWeb -Group $group
            
            #}
        #}
        AssignPremission($SPweb)
    
    }
    
    }
    
    $SPWebParent= Get-SPWeb -Identity $webUrl
    AssignPremission($SPWebParent)

    10 февраля 2012 г. 8:12
  • А обязательно передавать параметры? 
    $userMail = "mail@mail.ru"
    $userDisplayName = "admin
    10 февраля 2012 г. 8:18
  • Можно и без них, в итоге скрипт будет таким:

    Add-PSSnapin Microsoft.SharePoint.PowerShell
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
    $userName = "admin-pc\admin" #Имя пользователя
    $webUrl = "http://mysite" #адрес сайта
    
    function AssignPremission{
    param( 
     [Parameter(
     Position = 0,
     Mandatory = $true,
     ValueFromPipeline=$true )]
     [Microsoft.SharePoint.SPWeb] $SPWebParent
     )
    
    foreach ($SPWeb in $SPWebParent.Webs)
    {
        $user = $SPWeb.EnsureUser($userName)
        $SPWeb.Roles["Полный доступ"].AddUser($user)
        AssignPremission($SPweb)
    
    }
    
    }
    
    $SPWebParent= Get-SPWeb -Identity $webUrl
    AssignPremission($SPWebParent)


    10 февраля 2012 г. 8:51
  • на некоторых узлах как оказалось нет группы "*- владельцы".

    По идее, надо пользоваться группой из свойства spweb.AssociatedOwnerGroup, а не "*- владельцы".
    10 февраля 2012 г. 11:09
    Отвечающий
  • Спасибо всем!

    Удачной трудовой недели.


    • Изменено RitroF 14 марта 2012 г. 9:20
    14 февраля 2012 г. 3:40