下午好。
最近我一直在尝试调整this powershell script(来自“Hey,Scripting Guy!Blog”)来修改单个文件的文件时间戳(CreationTime,LastAccessTime和LastWriteTime)而不是文件的文件夹。但是,我一直遇到问题,让它与我所做的修改一起工作。
原始脚本如下:
Set-FileTimeStamps function
Function Set-FileTimeStamps
{
Param (
[Parameter(mandatory=$true)]
[string[]]$path,
[datetime]$date = (Get-Date))
Get-ChildItem -Path $path |
ForEach-Object {
$_.CreationTime = $date
$_.LastAccessTime = $date
$_.LastWriteTime = $date
}
} #end function Set-FileTimeStamps
修改后的是:
Function Set-FileTimeStamps
{
Param (
[Parameter(mandatory=$true)]
[string]$file,
[datetime]$date = (Get-Date))
$file.CreationTime = $date
$file.LastAccessTime = $date
$file.LastWriteTime = $date
} #end function Set-FileTimeStamps
当我尝试运行脚本时,它会抛出以下错误:
Property 'CreationTime' cannot be found on this object; make sure it exists and is settable.
At C:\Users\Anton\Documents\WindowsPowerShell\Modules\Set-FileTimeStamps\Set-FileTimeStamps.psm1:7 char:11
+ $file. <<<< CreationTime = $date
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyAssignmentException
所以,我不清楚在修改原始剧本时我失败的地方,如果有人能指出正确的方向,我会感激不尽。
提前致谢。
答案 0 :(得分:3)
[string]
类型没有CreationTime
,LastAccessTime
和LastWriteTime
属性,因为它是一个文件名...它始终是{{1 }类型。
您需要将[string]
类型作为脚本参数传递或转换为此类型:
[system.io.fileinfo]
在原始脚本中,cmdlet Function Set-FileTimeStamps
{
Param (
[Parameter(mandatory=$true)]
[string]$file,
[datetime]$date = (Get-Date))
$file = resolve-path $file
([system.io.fileinfo]$file).CreationTime = $date
([system.io.fileinfo]$file).LastAccessTime = $date
([system.io.fileinfo]$file).LastWriteTime = $date
} #end function Set-FileTimeStamps
返回[fileinfo]类型,以及它的工作原理。