ルドルフもわたるふもいろいろあってな

Microsoft 365、Power Platform、PowerShellについて調べたことや検証したことなどを投稿します。技術の話は面白い。

【PowerShell】テナント内のフローをCSVで一覧出力する

今回はPowerShellの話です。掲題の内容を実現するPowerShellを作成しました。

PowerShellスクリプトと出力CSVのサンプルをGitHubにアップロードしました。
github.com

背景

数日前に思い付きでTwitterでこんなツイートをしました。そうしたところ「欲しい」と言ってくれるかたがいました。なので作ってみました。


スクリプトの解説

出力イメージ

CSVの出力イメージです。

列の説明

  • 名前       ・・・ フローの表示名
  • 環境       ・・・ PowerPlatformの環境名(既定の環境は頭にDefaultがつく)
  • フローID     ・・・ フローのID
  • 作成者アドレス  ・・・ フローを作成したユーザーのメールアドレス
  • 作成者名     ・・・ フローを作成したユーザーの表示名
  • 作成日時     ・・・ フローが作成された日時(日本時間)
  • ステータス    ・・・ フローがオンかオフか
  • アクションの個数 ・・・ フローが含むアクションの個数

前提条件

スクリプトの実行に必要な条件は以下の通りです。

  • 以下のモジュールがPC端末にインストールされていること
  • 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の環境単位では環境管理者で足りそうです。

今回は以上です。