我试图编写一个脚本来比较同一文件的两个版本的日期,并在适当时将其复制。
作为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
中的其他文件,然后再次抛出错误。
答案 0 :(得分:1)
错误从这里开始:
$LocalFile = (Get-ChildItem $LocalPath)
在当前路径上调用Get-ChildItem
会返回每个子节点......一个数组。接下来,作为if
声明的一部分,您将执行此操作:
$LocalFile.LastWriteTime
那还是一个阵列。您现在正试图将Object[]
传递给Get-Date
命令行,并且它不知道如何处理它。