見出し画像

OneDriveforBussinessでユーザが外部公開しているファイルを調べる

みなさんこんばんわ。
OneDriveforBussinessを利用してますか?
最近使い方に慣れてきました。(遅
私はフォルダを特定のユーザと共有して社外とのやり取りに使ってます。

これでPPAPで送られてくるZIPファイルとパスワードを保存しておけばメールからいちいち調べなくてもいいので楽になりました。
(できればメールじゃなくてTeamsでやり取りしたいけど)

そういえば、だれがどのファイルを外部と共有しているんだっけ?パスワードなしの共有とかやだなー外部共有してるファイル調べたいなーと思ったらMicrosoft365の管理センターにはそんな機能なく監査ログくらいなのよねー。涙 しかも調べにくいんだよあれー。なんとかなんねーかなぁ思い毎日もんもんとしておりました。

そんなとある日、神が降臨しました。
ジーザス
マグニファイ
マーベラス

キャプチャ


ということでお礼をかねての備忘録兼アウトプットです。
@thdy5さん本当にありがとうございます!


■え?まだ自分のテナント持ってないの?

すいません。煽りから入ります。
いきなり本番のテナントで試す勇気はないので検証環境でやりました。
本当はE5のライセンスほしいんですけど田舎のエンジニアに月6000円は出せません。本番の環境で試すの怖いよー。でも検証したいよー。ライセンス持ってないよーな方は開発者プログラムに登録してください。

https://docs.microsoft.com/ja-jp/office/developer-program/microsoft-365-developer-program

■AzureADにアプリを登録

さて、無事に検証環境の構築が済んだところでこのスクリプトを動かすアプリケーションを作成します。

1.アプリケーションの登録

AzurePortal→Azure Active Directory→アプリの登録→新規登録

アプリの登録

適当な名前を付けてアプリケーションを登録してください。
リダイレクトURLは特に必要ありません。

アプリの登録2

2.アプリケーションにAPI権限を追加
作成したアプリを選択→APIアクセスの許可→アクセス許可の追加
もともとUser.Readの権限がついていると思いますのでこちらを削除した後にアクセス許可の追加をクリックしてMicrosoft Graph APIを選択
その後アプリケーションの許可を選択

APIアクセス許可2

3.3つのAPI権限を追加
Directory.Read.All
Sites.ReadWrite.All
User.Read.All
の3つの権限を追加してください。

キャプチャ

最終的にこうなっていればおk

APIアクセス許可3

4.管理者の同意を与える
テナント名に管理者の同意を与えますをクリックしてはいを選択

APIアクセス許可5

最終的に状態が付与されましたになっていればOKです。

アプリケーションのアクセス許可2

5.クライアントシークレットの作成
作成したアプリケーション→クライアントとシークレット→新しいクライアントシークレット→追加をクリック

証明書とシークレット3

クライアントシークレットの値をメモ帳にでもコピーしておいてください。
この画面から移動すると消えるみたいです。
(消えたり消えなかったりするんだけど・・・よくわからない。キャッシュかしら?)

証明書とシークレット4

6.アプリケーションIDを控える
ここも後で使うのでメモ帳にでも控えておいてください。

キャプチャ

■PowerShellの設定

Powershellでモジュールをインストールしまっす。
WindowsPowershellを管理者として起動してください。
WindowsPowershell(x86)じゃないよ。おじさんとの約束だよ。
Set-ExecutionPolicy RemoteSignedもいれておかないとPowershell起動できないよ。
MacじゃそもそもPowershellがなんだか動かないよ。
ここでめちゃめちゃハマりました。笑

そして以下のコマンドを入力してモジュールをインストール
MSOnlineはいらないと思うのですが、これから使うだろうと思いインストールしてますます。
Install-Module MSOnline
Import-Module MSOnline 
Install-Module Azure AD
Import-Module Azure AD

画像12

■スクリプトファイルの書き換え

参考資料のURLに乗っているPowershellをローカルにコピーして以下を自分の環境に合わせて編集してください。
$ADALpath は環境によって変わると思いますが2021/03/05現在では2.0.2.130でした。
$tenantIDはドメイン名です。IDって書いてあるんだけど.... わたしはXXX.onmicrosoft.comやカスタムドメイン名を入力しますた。
$appID、$client_secretはメモ帳にコピーしておいたものを入力っす。

#Variables to configure
$ADALpath = 'C:\Program Files\WindowsPowerShell\Modules\AzureAD\2.0.2.130\Microsoft.IdentityModel.Clients.ActiveDirectory.dll' #path to Microsoft.IdentityModel.Clients.ActiveDirectory.dll
$tenantID = "<テナントのドメイン名>" #your tenantID or tenant root domain
$appID = "<アプリケーションID>" #the GUID of your app. For best result, use app with Sites.ReadWrite.All scope granted.
$client_secret = "<クライアントシークレット>" #client secret for the app

■実行

Powershellスクリプトを置いてあるフォルダで実行するとこんな感じになります。
同じフォルダにCSVファイルが出来上がります。

できあがったCSVファイルのPermissionsを確認してください。

■edit:anonymous
パスワードをなしでリンクをを知っているすべてのユーザで共有

■edit:anonymous[PasswordProtected]
パスワードをつけてリンクを知っているすべてのユーザで共有

■edit:organization
リンクを知っている組織ユーザで共有

■edit:users
特定のユーザで共有(メールアドレスあり)

■なし
共有していない


■参考URL

https://github.com/michevnew/PowerShell/blob/master/Graph_ODFB_shared_files.ps1

https://github.com/michevnew/PowerShell/blob/master/Graph_ODFB_shared_files.md


この記事が気に入ったらサポートをしてみませんか?