【PowerShell】ドキュメントライブラリ内のフォルダの登録日時を見て削除する【SharePoint】

Microsoft365
スポンサーリンク

前回ドキュメントライブラリ内のファイルを削除するためにアイテム保持ポリシーを作成しました。困ったことにフォルダが削除できません。調べたのですがやはり分かりませんでしたので、別でフォルダ削除プログラムを作成しました。「これ作成するんだったらこのプログラム上でもファイル削除できるやん!」というツッコミはお控えください。

アイテム保持ポリシーを使用してドキュメントライブラリのファイルを削除する方法はこちら。

スポンサーリンク

PowerAutomateではできない?

最初はPowerAutomateでフォルダの削除を考えました。作成しているとどうしてもフォルダの登録日時が取得できませんでした。更新日時は取得できるんです。でも更新日時ですと、フォルダ名が変更されたらアップデートされてしまいます。登録日時の取得方法知っておられる方教えてください。

PowerAutomateは諦めてPowerShellで作成することにしました。

まずはPnP PowerShellをインストール

PnP PowerShell のメソッドを使って削除するため、PnP PowerShellをインストールされていない方はまずインストールしてください。インストール方法は下記ページからお願いいたします。多要素認証されている方もインストールが必要になりますのでご一緒にどうぞ。

注意事項

試す環境はアイテム保持ポリシーが入っているドキュメントライブラリです。その他の環境での動作は不明です。

ファイルが一つでも入っているとフォルダ削除はできません。ファイルが全て削除されていることが前提となります。ファイルさえ削除してしまえばサブフォルダがどれだけたくさんあるフォルダであろうと削除可能です。そのフォルダのルートから削除すれば全てのフォルダが一気に削除されます

おソース

多要素認証に対応させたソースです。ブラウザが起動し認証を求められます。登録日時から90日経過したフォルダを削除します。

# SharePoint OnlineのURLと資格情報を設定
$siteUrl = "https://papamamameyou.sharepoint.com/sites/BackupSite/"

# SharePoint Onlineに接続
Connect-PnPOnline -Interactive -Url $siteUrl

# SharePoint Onlineのドキュメントライブラリ内のフォルダ一覧を取得
$folders = Get-PnPFolder -List "Shared Documents"

#今日の日付を取得する
$today = Get-Date

# フォルダ名と登録日時を表示
foreach ($folder in $folders) {

    $createdTime = $folder.TimeCreated
    $folderName = $folder.Name

    #日付の差分を取得する
    $timeSpan = $today - $createdTime

    #作成日から90日以上経過していたら
    If($timeSpan.totalDays -ge 90){

        try{

            if($folder -ne $null){
                Remove-PnpFolder -Name $folderName -Folder "Shared Documents" -Force -Recycle
                Write-Host "フォルダ名: $folderName 削除完了"
            }
            
        }catch{
            write-host "Error: $($_.Exception.Message)"
        }
    }
}

# SharePoint Onlineから切断
Disconnect-PnPOnline

解説

最初の2行でSharePointにログインします。多要素認証に対応しています。

Get-PnPFolder でドキュメントライブラリ内の全てのフォルダを取得します。配下にあるサブフォルも取得します。

Remove-PnpFolder -Name $folderName -Folder "Shared Documents" -Force -Recycle

-Name 削除するフォルダ名
-Folder 親フォルダ名
-Force 「削除しますか?」を聞かれないようにする。
-Recycle 指定するとフォルダーはゴミ箱に移動する。省略された場合フォルダは直接削除される。

サブフォルダがあるフォルダの場合、親フォルダが削除されると配下のサブフォルダも削除されます。Get-PnPFolderでサブフォルダも取得しているため、いざサブフォルダを削除しようとしても既に存在しないパターンがあります。その時のために try catch で囲んでおきましょう。

まとめ

アイテム保持ポリシーでフォルダ削除をしたいです。それが理想です。どなたかやり方ご存知の方いらっしゃいませんか!!

コメント

タイトルとURLをコピーしました