Skip to content

Cannot change LastWriteTime or LastAccessTime of a symlink #38824

Closed
@Liturgist

Description

@Liturgist

Description

It does not appear to be possible to change the LastWriteTime or LastAccessTime of a symlink. It works on hardlinks.

PS C:\src\t> $SleepTime = 61
PS C:\src\t> $BaseDir = 'C:\src\t'
PS C:\src\t> $BaseFile = Join-Path -Path $BaseDir -ChildPath 'yy.txt'
PS C:\src\t> $SymlinkFile = Join-Path -Path $BaseDir -ChildPath 'yy-slink.txt'
PS C:\src\t> $HardlinkFile = Join-Path -Path $BaseDir -ChildPath 'yy-hlink.txt'
PS C:\src\t> if (Test-Path -Path $BaseFile) { Remove-Item -Path $BaseFile }
PS C:\src\t> if (Test-Path -Path $SymlinkFile) { Remove-Item -Path $SymlinkFile }
PS C:\src\t> if (Test-Path -Path $HardlinkFile) { Remove-Item -Path $HardlinkFile }
PS C:\src\t> New-Item -Path $BaseFile -ItemType File -Value "this is a new file`r`n"


    Directory: C:\src\t

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---          2020-07-06    14:23             20 yy.txt

PS C:\src\t> New-Item -ItemType SymbolicLink -Path $SymlinkFile -Target $BaseFile


    Directory: C:\src\t

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
la---          2020-07-06    14:23              0 yy-slink.txt -> C:\src\t\yy.txt

PS C:\src\t> Get-ChildItem -Path 'C:\src\t' -Filter 'yy*.txt' | Format-List 'Name','*Time'

Name           : yy.txt
CreationTime   : 2020-07-06 14:23:41
LastAccessTime : 2020-07-06 14:23:41
LastWriteTime  : 2020-07-06 14:23:41

Name           : yy-slink.txt
CreationTime   : 2020-07-06 14:23:41
LastAccessTime : 2020-07-06 14:23:41
LastWriteTime  : 2020-07-06 14:23:41


PS C:\src\t> Start-Sleep -Seconds $SleepTime
PS C:\src\t> $NewTimestamp = Get-Date
PS C:\src\t> Set-ItemProperty -Path $SymlinkFile -Name LastAccessTime -Value $NewTimestamp
PS C:\src\t> Set-ItemProperty -Path $SymlinkFile -Name LastWriteTime -Value $NewTimestamp
PS C:\src\t> Start-Sleep -Seconds 5
PS C:\src\t> Get-ChildItem -Path $BaseDir -Filter 'yy*.txt' | Format-List 'Name','*Time'

Name           : yy.txt
CreationTime   : 2020-07-06 14:23:41
LastAccessTime : 2020-07-06 14:24:42
LastWriteTime  : 2020-07-06 14:24:42

Name           : yy-slink.txt
CreationTime   : 2020-07-06 14:23:41
LastAccessTime : 2020-07-06 14:23:41
LastWriteTime  : 2020-07-06 14:23:41


PS C:\src\t> & cmd.exe /C "DIR /TA yy*"
 Volume in drive C has no label.
 Volume Serial Number is 0E33-300C

 Directory of C:\src\t

2020-07-06  14:23    <SYMLINK>      yy-slink.txt [C:\src\t\yy.txt]
2020-07-06  14:24                20 yy.txt
               2 File(s)             20 bytes
               0 Dir(s)  739,939,135,488 bytes free
PS C:\src\t> & cmd.exe /C "DIR /TW yy*"
 Volume in drive C has no label.
 Volume Serial Number is 0E33-300C

 Directory of C:\src\t

2020-07-06  14:23    <SYMLINK>      yy-slink.txt [C:\src\t\yy.txt]
2020-07-06  14:24                20 yy.txt
               2 File(s)             20 bytes
               0 Dir(s)  739,939,135,488 bytes free
PS C:\src\t> New-Item -ItemType HardLink -Path $HardlinkFile -Target $BaseFile


    Directory: C:\src\t

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---          2020-07-06    14:24             20 yy-hlink.txt

PS C:\src\t> Get-ChildItem -Path $BaseDir -Filter 'yy*.txt' | Format-List 'Name','*Time'

Name           : yy.txt
CreationTime   : 2020-07-06 14:23:41
LastAccessTime : 2020-07-06 14:24:42
LastWriteTime  : 2020-07-06 14:24:42

Name           : yy-hlink.txt
CreationTime   : 2020-07-06 14:23:41
LastAccessTime : 2020-07-06 14:24:42
LastWriteTime  : 2020-07-06 14:24:42

Name           : yy-slink.txt
CreationTime   : 2020-07-06 14:23:41
LastAccessTime : 2020-07-06 14:23:41
LastWriteTime  : 2020-07-06 14:23:41


PS C:\src\t> Start-Sleep -Seconds $SleepTime
PS C:\src\t> $NewTimestamp = Get-Date
PS C:\src\t> Set-ItemProperty -Path $HardlinkFile -Name LastAccessTime -Value $NewTimestamp
PS C:\src\t> Set-ItemProperty -Path $HardlinkFile -Name LastWriteTime -Value $NewTimestamp
PS C:\src\t> Start-Sleep -Seconds 5
PS C:\src\t> Get-ChildItem -Path $BaseDir -Filter 'yy*.txt' | Format-List 'Name','*Time'

Name           : yy.txt
CreationTime   : 2020-07-06 14:23:41
LastAccessTime : 2020-07-06 14:24:42
LastWriteTime  : 2020-07-06 14:24:42

Name           : yy-hlink.txt
CreationTime   : 2020-07-06 14:23:41
LastAccessTime : 2020-07-06 14:25:50
LastWriteTime  : 2020-07-06 14:25:50

Name           : yy-slink.txt
CreationTime   : 2020-07-06 14:23:41
LastAccessTime : 2020-07-06 14:23:41
LastWriteTime  : 2020-07-06 14:23:41


PS C:\src\t> & cmd.exe /C "DIR /TA yy*"
 Volume in drive C has no label.
 Volume Serial Number is 0E33-300C

 Directory of C:\src\t

2020-07-06  14:25                20 yy-hlink.txt
2020-07-06  14:23    <SYMLINK>      yy-slink.txt [C:\src\t\yy.txt]
2020-07-06  14:24                20 yy.txt
               3 File(s)             40 bytes
               0 Dir(s)  739,939,672,064 bytes free
PS C:\src\t> & cmd.exe /C "DIR /TW yy*"
 Volume in drive C has no label.
 Volume Serial Number is 0E33-300C

 Directory of C:\src\t

2020-07-06  14:25                20 yy-hlink.txt
2020-07-06  14:23    <SYMLINK>      yy-slink.txt [C:\src\t\yy.txt]
2020-07-06  14:24                20 yy.txt
               3 File(s)             40 bytes
               0 Dir(s)  739,939,672,064 bytes free

Configuration

C:>dotnet --info
.NET SDK (reflecting any global.json):
 Version:   5.0.100-preview.5.20279.10
 Commit:    8139f1b74e

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.18363
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Users\pwatson\AppData\Local\Microsoft\dotnet\sdk\5.0.100-preview.5.20279.10\

Host (useful for support):
  Version: 5.0.0-preview.5.20278.1
  Commit:  4ae4e2fe08

.NET SDKs installed:
  2.2.402 [C:\Program Files\dotnet\sdk]
  3.0.100-rc1-014190 [C:\Program Files\dotnet\sdk]
  3.1.301 [C:\Program Files\dotnet\sdk]
  5.0.100-preview.5.20279.10 [C:\Users\pwatson\AppData\Local\Microsoft\dotnet\sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.All 2.1.19 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.2.7 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.19 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.2.7 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.0.0-rc1.19457.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.1.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 5.0.0-preview.5.20279.2 [C:\Users\pwatson\AppData\Local\Microsoft\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.1.19 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.7 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.0.0-rc1-19456-20 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.1.4 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.1.5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 5.0.0-preview.5.20278.1 [C:\Users\pwatson\AppData\Local\Microsoft\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 3.0.0-rc1-19456-20 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 3.1.4 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 3.1.5 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 5.0.0-preview.5.20278.3 [C:\Users\pwatson\AppData\Local\Microsoft\dotnet\shared\Microsoft.WindowsDesktop.App]

Regression?

Unknown

Other information

PS C:\src\t> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      7.0.1
PSEdition                      Core
GitCommitId                    7.0.1
OS                             Microsoft Windows 10.0.18363
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions