M365関連 プログラム 技術

PowerShellでOneDriveフォルダ配下のステータスを操作する

OneDriveフォルダ配下にあるファイルのステータスをいじる方法を検証してみました

OneDriveフォルダ配下の状態を取得する

今回はWindowsの標準コマンドである「attrib」を使用して対象ファイルの状態を確認します

$targetFolder = "OneDriveのフォルダパス"
# 対象フォルダ配下の全ファイルを取得
$files = Get-ChildItem -Path $targetFolder -Recurse -File
foreach($file in $files) {
    # 対象ファイルの状態をattribコマンドで取得
    attrib $file.FullName
}

上記を実行すると以下のログが書き出されます。対象ファイルのパスが長すぎたりして正常に実行できない場合は「パラメーターの書式が違います -」といったような表示なります

各ステータスについては以下のサイトが詳しく書かれています

参考サイト
コマンドプロンプト | ファイル属性の表示と設定(ATTRIB)
コマンドプロンプト | ファイル属性の表示と設定(ATTRIB)

ATTRIB コマンドを使用するとファイル属性の表示と変更を行うことができます。ここではコマンドプロンプトにおける AT ...

続きを読む

ファイルの状態を変更する

今回はステータスに「O(オフライン専用)」、「S(システムファイル)」、「P(固定ファイル)」の属性がないものを対象に実施します。下記の画像の場合は「rirekisho_excel.xlsx」が対象となります
ちなみに「P(固定ファイル)」はみどりの塗りつぶしチェックマークの状態になります

ステータスに対して「U(固定解除属性)」を付与します

$fileInfo = attrib $file.FullName
# 必要となる文字列だけを切り出す
$subString = $fileInfo.ToString().Substring(0, 21)
# O属性は「オフライン専用」、S属性は「システムファイル」、P属性は「固定ファイル」を持たないものを対象とする
if($subString.indexOf("O") -eq -1 -and $subString.indexOf("S") -eq -1 -and $subString.indexOf("P") -eq -1) {
    attrib -P +U $filePath

    # U属性が付与できているかの確認
    $fileInfo = attrib $filePath
    if($fileInfo.ToString().Contains("U")) {
        LogWrite "INFO" "Success: $filePath"
    } else {
        LogWrite "ERROR" "Error: $filePath の処理ができませんでした"
    }
}

上記コードを実行すると画像のようにみどりチェックマークから雲マークに変わっていることが確認できます

これを実行すればバッチ等で定期的に実行すればPC上の容量を削減することができると思います

-M365関連, プログラム, 技術
-, ,