PowerShellでファイルの作成日時や更新日時を変更する

  • Windows 10 Pro 22H2
  • Windows 11 Pro 21H2

作成日時

些か疚しい事情からファイルの作成日時を変更したい。これを実行に移すにはPowerShellでSet-ItemPropertyコマンドを用いる。作成日時に工夫を凝らしたいファイルはこういう具合である。

図1. ファイルの作成日時

此れを1973年4月1日の0時0分0秒に作成したことにするなら、下記のようにコマンドを実施する。属性名CreationTimeで変更の対象をファイルの作成日時とする。

> Set-ItemProperty .\機密.txt -Name creationtime -Value "1973-04-01 00:00:00"

するとこれこのとおり、指示した日時へと変更される。

図2. 作成日時が変更された様子

更新日時

辻褄を合わせるために更新日時へも手を加えるなら属性名をLastWriteTimeにセットしてこうである。

> Set-ItemProperty .\機密.txt -Name lastwritetime -Value "1995-01-17 05:46:42"
図3. 更新日時が変更された様子

アクセス日時

アクセス日時を変更する場合はLastAccessTimeを指定すればよろしいが、環境によってはコマンドは正常終了しているのに変化が見られなかった。

> Set-ItemProperty .\機密.txt -Name lastaccesstime -Value "2019-05-01 12:34:56"

どうも「最終アクセス日時の更新」という設定が有効になっているといけない。これはdisableLastAccessというパラメータが司っている。

fsutilコマンドで以ってこれを変更し、無効にできるようである。あとから元の設定に戻すために、まずは現在の設定値を把握しておく。

> .\fsutil.exe behavior query disablelastaccess
DisableLastAccess = 2  (システム管理、最終アクセス日時の更新が有効)

次いで管理者としてコマンドプロンプト、若しくはPowerShellを起動する。そうして下に掲げるコマンドを実行する。

> .\fsutil.exe behavior set disablelastaccess 3
DisableLastAccess = 3  (システム管理、最終アクセス日時の更新が無効)
この操作は直ちに有効になります (再起動は不要です)

それから改めてSet-ItemPropertyコマンドでアクセス日時の変更を試みると首尾よく成功した。気が済んだらdisableLastAccessは元の値へと戻しておく。

図4. アクセス日時が変更された様子

なおdisableLastAccessは0~3の値を取るようでそれぞれ次のような内容であるから「1」にセットしても最終アクセス日時の更新を無効にできそうな情勢であった。

図5. disableLastAccessの取りうる値

これで一通り日時にまつわる細工はできたが、この他PowerShellトランスクリプションが有効になっていると監査の際に実行者や設定内容が詳らかになってしまうから、併せて工夫しなければならない。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください