none
SharePointグループの使用箇所の取得方法について

    質問

  • SharePointグループがサイトコレクション内のどのサイトで使用されているか、どのようなアクセス許可レベルが設定されているかの
    一覧の出力処理を作成したいと思っています。
    そのような情報をプログラムで取得する方法はありますでしょうか?

    各サイトの設定画面で"ユーザーとグループ"の設定を選択し、任意のグループを選択して所属するユーザーが表示されている状態の時に、"設定"⇒"グループ権限の表示"を選択すると、"サイトコレクション権限の表示"のダイアログが表示され、対象のSharePointグループが使用されているURLとアクセス許可レベルが一覧で表示されます。(アイテムレベルの設定まで表示されます)

    イメージとしてはこの情報をプログラムで取得するような感じです。
    (サイトレベルでの権限のみが取得できれば問題ありません。)

    SPGroupにはこのような情報を取得するメソッド等は見つかりませんでした。
    全てのサイトの権限の設定を見に行って、対象のSharePointグループが使用されている箇所の情報を取得してもいいのですが、
    サイトの数とSharePointグループが多数あるため、全SharePointグループに対して全サイトの設定情報を確認しに行く処理は
    かなり重くなると思われませす。

    "ユーザーとグループ"の画面で任意のグループを選択して"グループ権限の表示"を選択した場合、
    比較的に短時間で"サイトコレクション権限の表示"のダイアログに使用箇所の一覧が表示されます。
    (私が確認した限りでは、かかっても1、2秒でした。)
    この時間を考えると全サイトの全リストとアイテムの権限を毎回見に行っているとは思えないので、
    どこかに情報を持っていてそこから情報を取得しているのではないかと思うのですが、
    そのような情報はどこかに持っていますでしょうか?

    また、その情報をプログラムで取得する方法はありますでしょうか?

    [サーバー環境]
     ・Web フロント x 2
     OS:Windows Server 2003 Standard Edition x64 SP2
     CPU:Dual Core Xeon 5140 2.33GHz x 2
     メモリ:4GB
     Office SharePoint Server 2007 SP1

    2012年7月18日 5:57

すべての返信

  • こんにちは

    ちょっとだけ試してみましたが、一応以下のような感じでサイト毎にアクセス許可情報は取れそうに思うのですが、これだと重いってことなのですかね。(PowerShellです)

    当方、サイト数が少ないので速さは検証できませんでした。

    SharePoint自体詳しくないのでご参考程度に。

    function expandSite($webs)
    {
        $webs | select -ExpandProperty webs  | %{
            Write-Host $_.URL -ForegroundColor green
            $_ | select -expandp AssociatedGroups | select name,roles 
            expandSite($_)}
    }
    Add-PSSnapin Microsoft.SharePoint.PowerShell
    $sitecol = Get-SPWeb http://hoge-sv/sites/hoge
    expandSite($sitecol) 

    2012年7月18日 9:15
  • minminnana207さん

    返信ありがとうございます。
    PowerShellについてあまり詳しくないので、頂いたシェルを実際に動かしてみようといろいろ試してみたのですが、
    Microsoft.SharePoint.PowerShellがないやらで、正常に動作せず結果はわかりませんでした。

    この方法だと以下のようにSharePointグループ毎に、アクセス許可設定されているサイトの情報が出力される感じでしょうか?(例1)

    (例1)
    グループA サイトa 投稿
          サイトb デザイン
          サイトc 読み取り
    グループB サイトa 読み取り
          サイトc デザイン

    それともサイト毎に、アクセス許可設定されているグループが出力される感じでしょうか?(例2)

    (例2)
    サイトa グループA 投稿
         グループB 読み取り
    サイトb グループA 読み取り
         グループC デザイン
    サイトc グループA 読み取り
         グループB 読み取り

    例2の方法であれば既に一覧を作成するプログラムを作成しているのですが、例1のようにSharePointグループ毎に
    プログラムで取得できないものかと思っています。
    例2の一覧を出力してExcelで加工して例1の形にするなどの方法や、プログラム上で例2の一覧情報をMapオブジェクトなどに格納して
    全SharePointグループに対して、使用されているサイトを検索して一覧を作成することでも実現はできると思います。

    ですが、"ユーザーとグループ"の設定画面で"設定"⇒"グループ権限の表示"を選択して表示される"
    サイトコレクション権限の表示"がかなりのパフォーマンスで表示されるので、
    SPGroupから使用されている箇所を取得する方法があるのではないかと思い質問させていただきました。

    2012年7月19日 7:41
  • こんにちは

    さしあたって前回のスクリプトをグループで纏めれば以下の様になりそうです。

    function expandSite($webs)
    {
        $webs | select -ExpandProperty webs  | %{
            $URL = $_.URL
            $_ | select -expandp AssociatedGroups | 
                select name,roles,@{name="URL";expression={$URL}} 
            expandSite($_)}
    }
    Add-PSSnapin Microsoft.SharePoint.PowerShell
    $sitecol = Get-SPWeb http://hoge-sv/sites/hoge
    expandSite($sitecol) | group name |  %{
        write-host $_.name -ForegroundColor green
        $_ | select -ExpandProperty group | 
            select URL,Roles | Out-Host
    }

    結果はこんな感じ。

    ちょっと眺めた感じだとグループ側から取得するPowerShellコマンドは見当たらないようでした。(あくまでもちょっと眺めただけですが)

    ご参考まで。

    2012年7月19日 8:36
  • minminnana207さん

    返信ありがとうございます。
    実行結果はグループ毎にアクセス許可設定されているサイトが表示されるようですね。

    ただPowerShellコマンドでも、グループ側から取得する方法は見当たらないのですね。
    私は.NetのC#でSPオブジェクトを使用して試していましたが、同様にグループ側から取得する方法はなかったので、
    そもそもそのようは方法はないのかもしれないですね。

    地道にサイト毎のアクセス許可設定情報を取得して、加工して作成することにします。

    2012年7月20日 4:24