使用filename作为powershell函数/脚本的参数

时间:2015-08-01 22:00:24

标签: powershell-v2.0

下午好。

最近我一直在尝试调整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

所以,我不清楚在修改原始剧本时我失败的地方,如果有人能指出正确的方向,我会感激不尽。

提前致谢。

1 个答案:

答案 0 :(得分:3)

[string]类型没有CreationTimeLastAccessTimeLastWriteTime属性,因为它是一个文件名...它始终是{{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]类型,以及它的工作原理。