无法转换' System.Object []'到' System.DateTime'

时间:2015-08-13 23:57:06

标签: powershell

我试图编写一个脚本来比较同一文件的两个版本的日期,并在适当时将其复制。

作为Powershell的新手,我只是试图找出正确的语法来实现这一点,但是我遇到了一个小问题,而且我不确定发生了什么或为什么。

$RemotePath = "e:\to be copied"
$LocalPath = "C:\temp"
$Curr_date = get-date

#Checking date and then copying file from RemotePath to LocalPath
Foreach($file in (Get-ChildItem $RemotePath))
{
    #Check if file exists. If it doesn't, copy the file.
    if (-Not (Test-Path "$LocalPath\$file"))
    {
        echo "$LocalPath\$file"
        "$file does not exist"
    }
    else
    {
        $LocalFile = (Get-ChildItem $LocalPath)
        echo $LocalFile
        echo $LocalFile.LastWriteTime
        echo $file
        echo $file.LastWriteTime
        #Check if newer (greater) than date of file in the Local Path
        if((get-date $file.LastWriteTime) -gt (get-date $LocalFile.LastWriteTime))
        {
            echo $Curr_date
            echo $file.LastWriteTime
            echo $LocalFile.LastWriteTime
        }
        #If not newer, don't copy file.
        else
        {
            echo $Curr_date
            echo $file.LastWriteTime
            echo $LocalFile.LastWriteTime
            "not copying $file"
        }
    }
}

相信由该行引起的:

if((get-date $file.LastWriteTime) -gt (get-date $LocalFile.LastWriteTime))

我得到的错误是:

Get-Date : Cannot convert 'System.Object[]' to the type 'System.DateTime' required by parameter 'Date'. Specified method is not supported.
At C:\Users\Benjamin\Desktop\PowerShell.ps1:24 char:57
+         if((get-date $file.LastWriteTime) -gt (get-date $LocalFile.LastWriteTime ...
+                                                         ~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Get-Date], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.GetDateCommand

此外,这个回显了C:\temp中文件的数据,然后是E:\To be copied中的一个文件,然后抛出错误。然后它再次循环,回显C:\temp中的文件,然后回显E:\To be copied中的其他文件,然后再次抛出错误。

1 个答案:

答案 0 :(得分:1)

错误从这里开始:

$LocalFile = (Get-ChildItem $LocalPath)

在当前路径上调用Get-ChildItem会返回每个子节点......一个数组。接下来,作为if声明的一部分,您将执行此操作:

$LocalFile.LastWriteTime

那还是一个阵列。您现在正试图将Object[]传递给Get-Date命令行,并且它不知道如何处理它。