PowerShell を使用した SharePoint Online 外部ユーザーのレポート作成

PowerShell を使用した SharePoint Online 外部ユーザーのレポート作成

ト メンバーからの SharePoint 外部ユーザーと共有

SharePoint 外部ユーザーとは、テナントにアカウントを持っていないユーザーのことです。Teams の影響により、ほとんどの SharePoint Online 外部ユーザーはト アカウントであり、外部ユーザーが Microsoft 365 グループ (チーム) のメンバーシップに参加するときに作成されます。組織で SharePoint Online と Azure AD B2B collaboration との統合、SharePoint では、ユーザーが外部のユーザーとファイルまたはフォルダーを共有するときにもト アカウントが作成されます。

この記事で説明したように、テナント内のすべての Microsoft 365 グループのメンバーシップのレポートを生成するのは合理的に簡単です。このレポートにはト アカウントが含まれており、間違った場所 (競合他社など) のトがテナント内の情報にアクセスできるかどうかを把握するために使用できます。ただし、レポートを作成するスクリプトは、次のようなコマンドレットに依存しています。 Get-UnifiedGroupLinks またはグラフ API はグループ メンバーの詳細を返すように要求し、サイトを所有するグループのメンバーではない SharePoint サイト内のト アカウントの言及は除外されます。

PnP サンプル リポジトリ

これは私をきれいに 外部ユーザーを報告するスクリプト で掲示される PnP サンプル リポジトリ (SharePoint 中心のコード例を参照するのに便利な場所です)。通常、問題を解決する方法は複数あることを反映して、3 つのバージョンが利用可能です (CLI for Microsoft 365、SharePoint Online PowerShell モジュール、および PnP PowerShell)。

不幸なことに、Graph APIリクエストを使用してサイトの外部ユーザーを取得する良い方法はないようです。テナント内のすべてのト アカウントのセット、またはチーム/グループのト アカウントは確かに見つけることができますが、これらの方法では、共有目的で追加されたト アカウントは除外されます。

Get-SPOExternalUser の奇妙さ

より良い方法の欠如は、インターネット上で見つかったスクリプトが Get-SPOExternalUser コマンドレット。これは、いくつかの点で奇妙なコマンドレットです。

例えば Get-SPOExternalUser を有する ページサイズ パラメーターは、返される外部ユーザーの数を制限します。最大値は 50 で、これは、1 つのサイトにこの数を超える外部ユーザーが存在する場合、すべてのユーザーが取得されるまでフェッチを続行する必要があることを意味します ( 立場 パラメータは、フェッチするユーザーのページの先頭を制御します)。次のようなコマンドが表示されます。

[array]$users = Get-SPOExternalUser -SiteUrl $SiteId -PageSize 50 -Position 50

また、ユーザー データのページを取得した後、それを他のページと組み合わせて完全なセットを取得する必要があります。ページネーションは Graph API 要求では一般的ですが、一致するすべての項目を取得するパラメーターの恩恵を受けることができるコマンドレットでこのように使用されるのは珍しいことです。

Get-SPOExternalUser -Limit All

出力に移り、外部ユーザー (guest アカウント) に対して返されるデータの例を次に示します。

Email         : vasil@michevxx.com
DisplayName   : Vasil Michev (MVP)
UniqueId      : 1003BFFD9AF15B76
AcceptedAs    : vasil@michevxx.com
WhenCreated   : 05/11/2018 18:46:40
InvitedBy     :
LoginName     :
IsCrossTenant : False

私が知る限り、 招待者 そして ログイン名 プロパティは使用されません。テナント内のすべてのサイトで、 招待された名前 プロパティが入力されています。その場合、プロパティはトアカウントのユーザープリンシパル名を保持していましたが、これがどのように起こったのか分かりませんでした。

受理者 プロパティは、サイトへの招待を承諾したアカウントの名前を保持します (ドキュメントを共有するため、またはト メンバーとして)。このプロパティは、共有 Teams チャネルに属するサイトには設定されません。代わりに、 ログイン名 プロパティは、チャネル サイトへの接続に使用されるアカウントをキャプチャします。

作成日時 プロパティもいくつかのコメントに値する。マイクロソフトは、2018年11月5日の18:46 UTC頃に多くのアカウントでこの値をリセットしたようです。複数のサイトにまたがる多くのアカウントには、この作成日があります。これは、その日付の特定の時刻に作成された外部ユーザーの不自然な集中です。私はそれを説明することはできません。

SharePoint 外部ユーザー レポートの作成

このスクリプトを実行して SharePoint 外部ユーザー レポートを生成するには、アカウントがグローバル テナント管理者または SharePoint 管理者ロールを保持している必要があります。手順は簡単で、おそらく非常に多くのバージョンがオンラインで入手できる理由です。このバージョンでは、Teams で使用されるチャネル接続サイトに関する追加情報がキャプチャされます。

  • すべてのサイトを検索します。
  • サイトごとに、その外部メンバーを取得します。
  • レポート ファイルを作成します。

ここにスクリプトがあります:

$Sites = Get-SPOSite -Limit All | Sort-Object Title

$ExternalSPOUsers = [System.Collections.Generic.List[Object]]::new() 

#Iterate through each site and retrieve external users
$Counter = 0
ForEach ($Site in $Sites) {
    $Counter++
    Write-Host ("Checking Site {0}/{1}: {2}" -f $Counter, $Sites.Count, $Site.Title)
    [array]$SiteUsers = $Null
    $i = 0; $Done = $False
    Do {
      [array]$SUsers = Get-SPOExternalUser -SiteUrl $Site.Url -PageSize 50 -Position $i
      If ($SUsers) { 
        $i = $i + 50
        $SiteUsers = $SiteUsers + $SUsers }
      If ($SUsers.Count -lt 50) {$Done = $True}   
    }  While ($Done -eq $False)

    ForEach ($User in $SiteUsers) {
       $ReportLine    = [PSCustomObject] @{  
         Email        = $User.Email 
         Name         = $User.DisplayName
         Accepted     = $User.AcceptedAs
         Created      = $User.WhenCreated
         SPOUrl       = $Site.Url
         TeamsChannel = $Site.IsTeamsChannelConnected
         ChannelType  = $Site.TeamsChannelType
         CrossTenant  = $User.IsCrossTenant
         LoginName    = $User.LoginName }
        $ExternalSPOUsers.Add($ReportLine) }
} #End ForEach Site

PSWriteHTML で遊ぶ

報告するデータがいくつかあるので、この本当の理由はrticleは、 PSWriteHTML モジュール。このモジュールは Przemyslaw Klys によって管理されており、その役割は PowerShell スクリプト用の HTML 出力を生成しやすくすることです。ImportExcel モジュールは、コミュニティが作成したモジュールのもう 1 つの例で、ユーザーがより優れた出力を生成するのに役立ちます。

いずれにせよ、HTMLレポートを作成するために、私はこれらのコマンドを使用しました:

Import-Module PSWriteHTML.psd1 -Force
$ExternalSPOUsers | Sort Email | Out-HtmlView -HideFooter -Title "SharePoint Online External Users Report"

図 1 は出力を示していますが、一見すると、 アウトグリッドビュー コマンドレット。重要な違いは、HTML レポートをさまざまな形式でエクスポートできることです (優れた PDF ファイルを含む)。

SharePoint Online 外部ユーザー レポート

SharePoint 外部ユーザー
図 1: SharePoint Online の外部ユーザー レポート

情報を共有するためのさまざまなオプションを持つことは良いことです。PowerShell からレポートを作成する場合は、PSWriteHTML モジュールを確認することを検討してください。それはあなたのためにいくつかの問題を解決するかもしれません。結局のところ、それは私のためにきれいなSharePoint外部ユーザーレポートを作成しました!


Office 365 アプリケーションが実際に継続的にどのように機能するかについては、 Office 365 for IT プロフェッショナル 電子ブック。毎月の更新により、Office 365 エコシステム全体で重要な点についてサブスクライバーに通知されます。

未分類

Posted by admin