none
Вывод списка групп и пользователей. RRS feed

  • Вопрос

  • Господа, задача наверное встречалась часто.
    Нужно показать какие группы где созданы и кто куда входит.
    Я нашел скрипт но получаю по нему ошибку.
    Может кто то как то по другому эту задачу решает. Вывести нужно по всему веб приложению лучше конечно в файлик.
    У меня ругается на 22 строчку типа лишняя {

    Missing closing ')' after expression in 'if' statement.
    At line:22 char:1
    +  <<<< {
        + CategoryInfo          : ParserError: (CloseParenToken:TokenId) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : MissingEndParenthesisAfterStatement

    [System.Reflection.Assembly]::LoadWithPartialName(“Microsoft.SharePoint”) > $null
     function EnumerateUserRolesPermissions ([string]$webURL){
     $site = new-object Microsoft.SharePoint.SPSite($webURL)
     $web = $site.OpenWeb()
     $webUsers = $web.Users
     $groups = $web.sitegroups
     foreach($webUser in $webUsers){
     $Permissions = $web.Permissions
     foreach($group in $groups)
     {
     foreach($Permission in $Permissions){
     if($webUser.ID -eq $Permission.Member.ID){
     foreach ($role in $webUser.Roles){
     if ($role.Type -ne [Microsoft.SharePoint.SPRoleType]::None)
     {
     write-host $webURL,“;“,$webUser.LoginName,“;“,$webUser.Name,“;",$role.Type.ToString(),";",$webUser.groups
     }
     }
     }
     if($group.ID -eq $Permission.Member.ID){
     foreach ($role in $group.Roles){
     if ($role.Type -ne [Microsoft.SharePoint.SPRoleType]::None
     {
     foreach($user in $group.users){
     write-host $webURL,“;“,$user.LoginName,“;“,$user.Name,“;",$role.Type.ToString(),";",$group.name
     }
     }
     }
     }
     }
     }
     }
     }
     function EnumerateSiteUsers ()
     {
     [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
     $farm = [Microsoft.SharePoint.Administration.SPFarm]::Local
     foreach ($spService in $farm.Services) {
     if (!($spService -is [Microsoft.SharePoint.Administration.SPWebService])) {
     continue;
     }
     foreach ($webApp in $spService.WebApplications) {
     if ($webApp -is [Microsoft.SharePoint.Administration.SPAdministrationWebApplication]) { continue }
     $webAppUrl = $webApp.GetResponseUri('Default').AbsoluteUri
     foreach ($site in $webApp.Sites) {
     foreach ($web in $site.AllWebs) {
     EnumerateUserRolesPermissions $web.url
     }
     }
     }
     }
     }


    http://sharepoint3000.blogspot.ru/ Мой блог, не судите строго- только начинаю.

    4 февраля 2013 г. 16:26

Ответы

  • Чтобы иметь возможность выводить в файл надо немного изменить скрипт, вот так (так как в предыдущем варианте с write-host это сделать нельзя):

    [System.Reflection.Assembly]::LoadWithPartialName(“Microsoft.SharePoint”) > $null
     function EnumerateUserRolesPermissions ([string]$webURL){
     $site = new-object Microsoft.SharePoint.SPSite($webURL)
     $web = $site.OpenWeb()
     $webUsers = $web.Users
     $groups = $web.sitegroups
     foreach($webUser in $webUsers){
     $Permissions = $web.Permissions
     foreach($group in $groups)
     {
     foreach($Permission in $Permissions){
     if($webUser.ID -eq $Permission.Member.ID){
     foreach ($role in $webUser.Roles){
     if ($role.Type -ne [Microsoft.SharePoint.SPRoleType]::None)
     {
     $webURL+“;“+$webUser.LoginName+“;“+$webUser.Name+“;"+$role.Type.ToString()+";"+$webUser.groups
     }
     }
     }
     if($group.ID -eq $Permission.Member.ID){
     foreach ($role in $group.Roles){
     if ($role.Type -ne [Microsoft.SharePoint.SPRoleType]::None)
     {
     foreach($user in $group.users){
     $webURL+“;“+$user.LoginName+“;“+$user.Name+“;"+$role.Type.ToString()+";"+$group.name
     }
     }
     }
     }
     }
     }
     }
     }
     function EnumerateSiteUsers ()
     {
     [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
     $farm = [Microsoft.SharePoint.Administration.SPFarm]::Local
     foreach ($spService in $farm.Services) {
     if (!($spService -is [Microsoft.SharePoint.Administration.SPWebService])) {
     continue;
     }
     foreach ($webApp in $spService.WebApplications) {
     if ($webApp -is [Microsoft.SharePoint.Administration.SPAdministrationWebApplication]) { continue }
     $webAppUrl = $webApp.GetResponseUri('Default').AbsoluteUri
     foreach ($site in $webApp.Sites) {
     foreach ($web in $site.AllWebs) {
     EnumerateUserRolesPermissions $web.url
     }
     }
     }
     }
     }

    В этом случае можно выводить на консоль, как и прежде, а в файл вот так:

    EnumerateSiteUsers >> c:\222.txt


    Dmitry

    Twitter Lightning Tools LogoLightning Tools Check out our SharePoint tools and web parts | Lightning Tools Blog | Мой Блог


    5 февраля 2013 г. 13:31
    Отвечающий

Все ответы

  • А так попробуйте:

    [System.Reflection.Assembly]::LoadWithPartialName(“Microsoft.SharePoint”) > $null
     function EnumerateUserRolesPermissions ([string]$webURL){
     $site = new-object Microsoft.SharePoint.SPSite($webURL)
     $web = $site.OpenWeb()
     $webUsers = $web.Users
     $groups = $web.sitegroups
     foreach($webUser in $webUsers){
     $Permissions = $web.Permissions
     foreach($group in $groups)
     {
     foreach($Permission in $Permissions){
     if($webUser.ID -eq $Permission.Member.ID){
     foreach ($role in $webUser.Roles){
     if ($role.Type -ne [Microsoft.SharePoint.SPRoleType]::None)
     {
     write-host $webURL,“;“,$webUser.LoginName,“;“,$webUser.Name,“;",$role.Type.ToString(),";",$webUser.groups
     }
     }
     }
     if($group.ID -eq $Permission.Member.ID){
     foreach ($role in $group.Roles){
     if ($role.Type -ne [Microsoft.SharePoint.SPRoleType]::None)
     {
     foreach($user in $group.users){
     write-host $webURL,“;“,$user.LoginName,“;“,$user.Name,“;",$role.Type.ToString(),";",$group.name
     }
     }
     }
     }
     }
     }
     }
     }
     function EnumerateSiteUsers ()
     {
     [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
     $farm = [Microsoft.SharePoint.Administration.SPFarm]::Local
     foreach ($spService in $farm.Services) {
     if (!($spService -is [Microsoft.SharePoint.Administration.SPWebService])) {
     continue;
     }
     foreach ($webApp in $spService.WebApplications) {
     if ($webApp -is [Microsoft.SharePoint.Administration.SPAdministrationWebApplication]) { continue }
     $webAppUrl = $webApp.GetResponseUri('Default').AbsoluteUri
     foreach ($site in $webApp.Sites) {
     foreach ($web in $site.AllWebs) {
     EnumerateUserRolesPermissions $web.url
     }
     }
     }
     }
     }


    Dmitry

    Twitter Lightning Tools LogoLightning Tools Check out our SharePoint tools and web parts | Lightning Tools Blog | Мой Блог

    5 февраля 2013 г. 7:51
    Отвечающий
  • Дмитрий,

    спасибо большое.

    Ошибок нет. А как правильно запустить то Ваш скрипт на вывод информации? Если копи  паст то  отработал и ничего не показал.


    http://sharepoint3000.blogspot.ru/ Мой блог, не судите строго- только начинаю.

    5 февраля 2013 г. 9:12
  • Например, у меня этот скрипт лежит в этом файле "C:\!\SiteUsers.ps1" . Запускаем консоль PowerShell, в ней пишем

    . C:\!\SiteUsers.ps1

    Далее убедимся, что функции были добавлены путём выполнения:

    dir function:\Enumerate*

    Если функции добавлены, то можно запускать:

    EnumerateSiteUsers


    Dmitry

    Twitter Lightning Tools LogoLightning Tools Check out our SharePoint tools and web parts | Lightning Tools Blog | Мой Блог

    5 февраля 2013 г. 9:25
    Отвечающий
  • Большое спасибо.

    Можно последний вопрос.

    пытаюсь вывести результат в файл

     EnumerateSiteUsers  | out-file -encoding default c:\222.txt

    и

    >> 1.txt

    файлы создаются, но пустые внутри. Все отображается только на экране.


    http://sharepoint3000.blogspot.ru/ Мой блог, не судите строго- только начинаю.

    5 февраля 2013 г. 11:34
  • Чтобы иметь возможность выводить в файл надо немного изменить скрипт, вот так (так как в предыдущем варианте с write-host это сделать нельзя):

    [System.Reflection.Assembly]::LoadWithPartialName(“Microsoft.SharePoint”) > $null
     function EnumerateUserRolesPermissions ([string]$webURL){
     $site = new-object Microsoft.SharePoint.SPSite($webURL)
     $web = $site.OpenWeb()
     $webUsers = $web.Users
     $groups = $web.sitegroups
     foreach($webUser in $webUsers){
     $Permissions = $web.Permissions
     foreach($group in $groups)
     {
     foreach($Permission in $Permissions){
     if($webUser.ID -eq $Permission.Member.ID){
     foreach ($role in $webUser.Roles){
     if ($role.Type -ne [Microsoft.SharePoint.SPRoleType]::None)
     {
     $webURL+“;“+$webUser.LoginName+“;“+$webUser.Name+“;"+$role.Type.ToString()+";"+$webUser.groups
     }
     }
     }
     if($group.ID -eq $Permission.Member.ID){
     foreach ($role in $group.Roles){
     if ($role.Type -ne [Microsoft.SharePoint.SPRoleType]::None)
     {
     foreach($user in $group.users){
     $webURL+“;“+$user.LoginName+“;“+$user.Name+“;"+$role.Type.ToString()+";"+$group.name
     }
     }
     }
     }
     }
     }
     }
     }
     function EnumerateSiteUsers ()
     {
     [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
     $farm = [Microsoft.SharePoint.Administration.SPFarm]::Local
     foreach ($spService in $farm.Services) {
     if (!($spService -is [Microsoft.SharePoint.Administration.SPWebService])) {
     continue;
     }
     foreach ($webApp in $spService.WebApplications) {
     if ($webApp -is [Microsoft.SharePoint.Administration.SPAdministrationWebApplication]) { continue }
     $webAppUrl = $webApp.GetResponseUri('Default').AbsoluteUri
     foreach ($site in $webApp.Sites) {
     foreach ($web in $site.AllWebs) {
     EnumerateUserRolesPermissions $web.url
     }
     }
     }
     }
     }

    В этом случае можно выводить на консоль, как и прежде, а в файл вот так:

    EnumerateSiteUsers >> c:\222.txt


    Dmitry

    Twitter Lightning Tools LogoLightning Tools Check out our SharePoint tools and web parts | Lightning Tools Blog | Мой Блог


    5 февраля 2013 г. 13:31
    Отвечающий
  • Спасибо все получилось

    http://sharepoint3000.blogspot.ru/ Мой блог, не судите строго- только начинаю.

    5 февраля 2013 г. 13:53