今回はPowerShellの話です。掲題の内容を実現するPowerShellを作成しました。
PowerShellスクリプトと出力CSVのサンプルをGitHubにアップロードしました。
github.com
背景
数日前に思い付きでTwitterでこんなツイートをしました。そうしたところ「欲しい」と言ってくれるかたがいました。なので作ってみました。
テナント内のフローを一覧出力するスクリプトは需要あるかな。
— わたるふ (@wataruf01) July 15, 2022
・フローの表示名
・フローを最後に更新した日時
・フローがオンかオフか
・フローの作成者 pic.twitter.com/MDtbdWOYwB
スクリプトの解説
出力イメージ
CSVの出力イメージです。
列の説明
- 名前 ・・・ フローの表示名
- 環境 ・・・ PowerPlatformの環境名(既定の環境は頭にDefaultがつく)
- フローID ・・・ フローのID
- 作成者アドレス ・・・ フローを作成したユーザーのメールアドレス
- 作成者名 ・・・ フローを作成したユーザーの表示名
- 作成日時 ・・・ フローが作成された日時(日本時間)
- ステータス ・・・ フローがオンかオフか
- アクションの個数 ・・・ フローが含むアクションの個数
前提条件
スクリプトの実行に必要な条件は以下の通りです。
- 以下のモジュールがPC端末にインストールされていること
- PnP.PowerShell モジュール
- Azure Active Directory モジュール
- PnP.PowerShellモジュールを使うためにAzure AD にアプリが登録されていること
- Register-PnPManagementShellAccess コマンドで登録を行う
- 実行ユーザーの権限
- 「全体管理者」または「Power Platform管理者」の役割が付与されていること
フローを取得しているのはPnP.PowerShellモジュールの機能によるものです。また、PnP.PowerShellモジュールで取得できる「フローの作成者」の情報はIDのみであるため、表示名とメールアドレスを取得するために「Azure Active Directory モジュール」を使用しています。
ソースコードを実行する前にテナントごとに直すところ
以下の場所をテナントに合わせて直してください
- 実行ユーザーのIDとパス
- アクセス先のSharePointサイト
「アクセス先のSharePointサイト」はPnP.PowerShellモジュールでテナントにアクセスするためだけに使用します。なので、サイトはどこでもいいです。ただし、実行ユーザーがアクセス権限を持っているサイトである必要があります。
ソースコード
#認証情報 $user = "xxx@xxx.onmicrosoft.com" $pass = "xxx" | ConvertTo-SecureString -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential($user, $pass) #環境に接続 Connect-PnPOnline "https://xxx.sharepoint.com" -Credentials $credential Connect-AzureAD -Credential $credential #テナント内のフローを取得 $environments = @(Get-PnPPowerPlatformEnvironment) $flows = @() foreach($environment in $environments) { $flows += Get-PnPFlow -Environment $environment -AsAdmin } #すべてのAzureADユーザーを取得 $allUsers = Get-AzureADUser -All $true #出力するCSVファイルのパスを定義 $outputFile = ".\output.csv" foreach($flow in $flows) { #作成者情報を取得 $creator = $allUsers | where ObjectId -EQ $flow.Properties.Creator.ObjectId #配列を作成 $obj = New-Object PSObject $obj | Add-Member -MemberType NoteProperty -Name 名前 -Value $flow.Properties.DisplayName $obj | Add-Member -MemberType NoteProperty -Name 環境 -Value $flow.Properties.EnvironmentDetails.Name $obj | Add-Member -MemberType NoteProperty -Name フローID -Value $flow.Name $obj | Add-Member -MemberType NoteProperty -Name 作成者アドレス -Value $creator.Mail $obj | Add-Member -MemberType NoteProperty -Name 作成者名 -Value $creator.DisplayName $obj | Add-Member -MemberType NoteProperty -Name 作成日時 -Value $flow.Properties.CreatedTime $obj | Add-Member -MemberType NoteProperty -Name ステータス -Value $flow.Properties.State $obj | Add-Member -MemberType NoteProperty -Name アクションの個数 -Value $flow.Properties.DefinitionSummary.Actions.Count #CSVに出力 $obj | Export-Csv -Path $outputFile -Encoding UTF8 -NoTypeInformation -Append }
ちなみに
前提条件の記載で必要な実行ユーザーの権限は「Power Platform管理者」としていますが、Power Platformの環境単位では環境管理者で足りそうです。
今回は以上です。