我有一个只读文件,例如samp.txt,并且在PowerShell上运行以下命令:
> $file = Get-Item .\samp.txt
> $file.LastAccessTime = (get-date)
我们得到:"Access to the path 'G:\Study_Material\Coding\samp.txt' is denied."
现在,在继续之前,请查看访问时间:
> $file.LastAccessTime
将
Sunday, December 30, 2018 11:02:49 PM
现在,我们打开WSL并执行:$ touch samp.txt
返回PowerShell,我们进行以下操作:
> $file = Get-Item .\samp.txt
> $file.LastAccessTime
我们得到:
Sunday, December 30, 2018 11:19:16 PM
因此,它已被修改,没有提升的特权。
现在我的问题是:如何通过修改ReadOnly
而不在$file.Attributes
标记的情况下单独在PowerShell中模拟此操作。
答案 0 :(得分:1)
处理ReadOnly文件时,不能简单地更改LastAccessTime。
(请参阅eryksun 的评论)。
为了使其能够在PowerShell中工作,您需要首先从文件属性中删除ReadOnly标志,进行更改并重置ReadOnly标志,如下所示:
$file = Get-Item .\samp.txt -Force
# test if the ReadOnly flag on the file is set
if ($file.Attributes -band 1) {
# remove the ReadOnly flag from the file. (FILE_ATTRIBUTE_READONLY = 1)
$file.Attributes = $file.Attributes -bxor 1
# or use: $file | Set-ItemProperty -Name IsReadOnly -Value $false
$file.LastAccessTime = (Get-Date)
# reset the ReadOnly flag
$file.Attributes = $file.Attributes -bxor 1
# or use: $file | Set-ItemProperty -Name IsReadOnly -Value $true
}
else {
# the file is not ReadOnly, so just do the 'touch' on the LastAccessTime
$file.LastAccessTime = (Get-Date)
}
您可以阅读有关文件属性及其数值here
的所有信息