SharePoint Onlineのファイル更新日付の変更について

最近開発から遠ざかっていたので利用できるかいまいち不安でしたが、
ListItemのUpdateOverwriteVersionメソッド、今も利用できるようですね。

ファイルのバージョンを上げずに内容を変更する際に利用するメソッドとなります。

更新日時や作成日時を変更する際に利用したりもします。

ただ、最近のMSDNでは内容については一言も触れてもらえていない!

ListItem.UpdateOverwriteVersion method (Microsoft.SharePoint.Client)

 

というか、SharePoint開発者が減ったのか、最近のサイトで参考になる情報がほとんどありませんでした。

ので、自分備忘録で載せておきます。
まずは以下サイトからSDKをダウンロード。

Download SharePoint Online Client Components SDK from Official Microsoft Download Center

32bit、64bitの二種モジュールがあります。(私は64bitでPowerShellを動かすので64bitを導入しました。)

f:id:mohessu:20170813001401p:plain

ダウンロードしたらインストールまでは迷うことはないので割愛。

Windows PowerShellを起動して以下コマンドを流し込みましょう。


# PowerShellに読み込み
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime") | Out-Null

# 各種定義
$url = Read-Host -Prompt "URLを入力してください";
$doclib = Read-Host -Prompt "ドキュメントライブラリ名を入力してください";
$user = Read-Host -Prompt "ユーザー名を入力してください";
# パスワード
$pas = Read-Host -Prompt "パスワードを入力してください" -AsSecureString;

# SharePoint Client Context インスタンスを生成
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($user, $pas);
$context = New-Object Microsoft.SharePoint.Client.ClientContext($url)
$context.Credentials = $credentials

# リスト読み込み
$list = $context.get_web().get_lists().getByTitle($doclib)

# リスト情報
$context.Load($list)
$context.ExecuteQuery()
Write-Host "リスト名 : " $list.Title
Write-Host "リストタイプ : " $list.BaseType
Write-Host "作成日 : " $list.Created

# アイテム情報
$query = New-Object Microsoft.SharePoint.Client.CamlQuery
# 表示内容を制御しない場合は空文字をクエリーとして渡すこと
$query.ViewXml = ""
$ListItems = $List.getItems($query)
$context.Load($ListItems)
$context.ExecuteQuery()

foreach($item in $ListItems)
{
Write-Host $item.Id.ToString() `t $item["FileLeafRef"] `t $item["Editor"].LookupValue `t $item["Modified"]
}

# アイテム更新(1個目のファイルの更新日付を変更)
$updateItem = $ListItems[0]
# Modifiedを選ぶと更新日となります。この項にデータを入れて、、、
$updateItem["Modified"] = "2010/12/10 10:00:00"
# UpdateoverwirteVersion!これで今SharePointにあるアイテムのバージョンを上げずに更新日付のみを更新します。
$updateItem.UpdateOverwriteVersion()

$context.Load($updateItem)
$context.ExecuteQuery()

# アイテム確認
foreach($item in $ListItems)
{
Write-Host $item.Id.ToString() `t $item["FileLeafRef"] `t $item["Editor"].LookupValue `t $item["Modified"]
}

サイトはSharePoint でもOneDriveでも問題なさそうです。

音楽:i do