none
Как поставить всем группам на узле (не во всем семействе) - владельца группы - другую группу этого узла. RRS feed

  • Вопрос

  • Подскажите как модифицировать данный скрипт:

    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)

    24 июля 2012 г. 5:33

Ответы

  • $web = get-spweb "http://portal"
    $user = $web.SiteGroups["GroupName"]
    $groups = $web.SiteGroups
    $groups | foreach { $_.Owner = $user; $_.Update(); Write-Output $_.Name }
    $web.dispose()


    Высказанное мною здесь - мои личные взгляды, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    • Предложено в качестве ответа Aviw_ 24 июля 2012 г. 18:58
    • Помечено в качестве ответа Roman Zhukov 29 июля 2012 г. 13:09
    24 июля 2012 г. 11:22
    Модератор

Все ответы

  • Нашел такой пример. Но там подставляется пользователь, всем группам.

    $web = get-spweb "http://portal"
    $user = $web.Site.RootWeb.EnsureUser("SHAREPOINT\system")
    $groups = $web.SiteGroups
    $groups | foreach { $_.Owner = $user; $_.Update(); Write-Output $_.Name }
    $web.dispose()

    24 июля 2012 г. 5:41
  • $web = get-spweb "http://portal"
    $user = $web.SiteGroups["GroupName"]
    $groups = $web.SiteGroups
    $groups | foreach { $_.Owner = $user; $_.Update(); Write-Output $_.Name }
    $web.dispose()


    Высказанное мною здесь - мои личные взгляды, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    • Предложено в качестве ответа Aviw_ 24 июля 2012 г. 18:58
    • Помечено в качестве ответа Roman Zhukov 29 июля 2012 г. 13:09
    24 июля 2012 г. 11:22
    Модератор
  • Иван спасибо.

    Переменная $groups включает все группы семейства.

    Подскажите пожалуйста как правильно выбрать только Группы относящиеся к конкретному узлу и его дочерним узлам, а не всего семейства?

    27 июля 2012 г. 4:12
  • >>Иван спасибо.

    Игорь

    >>как правильно выбрать только Группы относящиеся к конкретному узлу и его дочерним узлам

    Для получения групп конкрентно узла используйте свойтство SPWeb.Groups, т.е. получится $groups = $web.Groups. Для получения дочерних узлов используйте свойство SPWeb.Webs. Это свойство возвращает только первых потомков (детей) узла. Если нужно обходить внуков и глубже, то придется написать функцию, которая будет принимать в качестве параметра узел, устанавливать владельца группы и вызывать себя же для всех детей полученного веба.

    Вполне возможно Вам так же подойдет свойство SPSite.AllWebs вместо SPWeb.Webs.

    $web.dispose() в PowerShell'е вызывать не всегда есть смысл. Память освобождается при закрытии консоли. Проще закрывать консоль иногда, чем каждый раз при экспериментах помнить что ещё не высвобождено из памяти.


    Высказанное мною здесь - мои личные взгляды, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    27 июля 2012 г. 6:00
    Модератор
  • >>Иван спасибо.

    Игорь прошу прощения.

    Написал структуру скрипта

    $web = get-spweb "http://portal"
    $user = $web.SiteGroups["GroupName"]
    $groups = $web.Groups
    
    foreach ($web in $web.Webs)
    {
    
        foreach ( $group in $web.SiteGroups)
        {
            { $_.Owner = $user; $_.Update(); Write-Output $_.Name }
        }
        
    }
    

    Мне не понятно, как написать по другому, что бы выполнить строго для всех групп узла и дочерних узлов.

    { $_.Owner = $user; $_.Update(); Write-Output $_.Name }


    1 августа 2012 г. 8:55
  • {
     $group.Owner = $user;
     $group.Update();
     Write-Output $group.Name
    }


    Высказанное мною здесь - мои личные взгляды, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    1 августа 2012 г. 9:13
    Модератор
  • Игорь большое спасибо!

    Итоговый скрипт:

    $web = get-spweb "portal"
    $user = $web.SiteGroups["Владельцы"]
    $groups = $web.Groups

    foreach ($web in $web.Webs)
    {

        foreach ( $group in $web.SiteGroups)
        {
            $group.Owner = $user;
    $group.Update();
      Write-Output $group.Name
        }
        
    }


    • Изменено RitroF 1 августа 2012 г. 10:38
    1 августа 2012 г. 10:38