Powershell中共享文件的LastWriteTime

时间:2011-10-27 07:06:10

标签: powershell time

我想获取位于共享文件夹中的txt文件的最后写入时间。我在另一个文件中写了最后一次写入时间。问题是我总是得到奇怪的DateTime(“星期日,12月31日,1600 4:00:00 PM”)。我在MSDN中找到了这个描述:“如果FileSystemInfo对象中描述的文件不存在,则此属性将返回午夜,即公元1601年1月1日午夜(CE)协调世界时(UTC),调整为当地时间。 “ 要检查我是否可以从文件中访问,我从该文件中加载了一些东西并且它可以工作。因此我的文件存在。如果我在本地驱动器上应用我的程序,我会得到正确的日期。以下代码代表我的程序:

$SharedFolder = "\\SharedFolder"


new-psdrive -name Z -psprovider FileSystem -root $SharedFolder
$usersFileName = "Z:\users.txt"
$file = New-object System.IO.FileInfo $usersFileName
$tempDate = $file.LastWriteTime


while($true){

        $file2 = New-object System.IO.FileInfo $usersFileName       
                $tempDate2 = $file2.LastWriteTime

        if($tempDate -ne $tempDate2)

                {
            $name ="ahs been changed"
            $Name | out-file C:\users\test\desktop\test2.txt -append
            $file = New-object System.IO.FileInfo $usersFileName
                        $tempDate = $file.LastWriteTime
                }
        $tempDate | out-file C:\users\test\desktop\test2.txt -append
        Start-sleep -s 2
}

1 个答案:

答案 0 :(得分:1)

而不是做

$file = New-object System.IO.FileInfo $usersFileName

你可以做到

$file = get-item $usersFileName

然后你仍然可以做$file.LastWriteTime并获得适当的时间。

我认为自己创建一个FileInfo对象不起作用,因为.Net方法可能不知道PsDrive,并且尽管Get-Item返回的是,它能够处理它内部。请注意,使用共享路径自己创建对象确实给出了正确的时间,因此不是分享问题,而是使用PsDrive。

此外,您无需一次又一次地创建对象,然后检查FileInfo。您只需调用Refresh方法即可。这与Get-Item相同。您只需致电Refresh即可获取更新时间。

顺便说一句,您似乎正在观看对文件的修改并将其记录下来。 .Net和Powershell(通过事件等)对做这些事情有很大的支持。看一下FileSystemWatcher(http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx