LastWriteTime общего файла в Powershell - PullRequest
0 голосов
/ 27 октября 2011

Я хотел бы получить время последней записи текстового файла, который находится в общей папке. Я пишу время последней записи в другом файле. Проблема в том, что я всегда получаю нечетное DateTime («Воскресенье, 31 декабря, 1600 4:00:00 PM»). Я нашел это описание в MSDN: «Если файл, описанный в объекте FileSystemInfo, не существует, это свойство вернет 12:00 полуночи, 1 января 1601 года нашей эры (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 Ответ

1 голос
/ 27 октября 2011

Вместо того, чтобы делать

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

Вы можете просто сделать

$file = get-item $usersFileName

Тогда вы все равно можете сделать $file.LastWriteTime и получить подходящее время.

Я думаю, что создание FileInfo объекта самостоятельно не работает, потому что PsDrive может быть неизвестен методу .Net, и, несмотря на то, что именно это возвращает Get-Item, он может обрабатывать его внутренне. Обратите внимание, что создание объекта самостоятельно с помощью общего ресурса дает правильное время, поэтому проблема связана не с общим ресурсом, а с PsDrive.

Кроме того, вам не нужно создавать объекты снова и снова, а затем проверять FileInfo. Вы можете просто вызвать метод Refresh. Это то же самое с Get-Item. Вы можете просто позвонить Refresh, чтобы узнать обновленное время.

И, между прочим, вы, кажется, наблюдаете за изменениями в файле и регистрируете его. .Net и Powershell (посредством событий и т. Д.) Имеют отличную поддержку для таких вещей. Посмотрите на FileSystemWatcher (http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...