Поиск даты изменения файла / папки
Я очень новичок в PowerShell, и я надеялся, что смогу получить помощь в создании скрипта, который сообщит мне дату изменения файла.
Хотелось бы, чтобы я знал больше о PowerShell, так как чувствую, что спрашиваю много (все мое свободное время на этой неделе будет посвящено лучшему изучению PowerShell). Также было бы очень полезно указать мне, где научиться делать это.
Вот полное краткое изложение. Мне нужно ежедневно запускать отчет, который проверяет список компьютеров в 90 разных магазинах, чтобы убедиться, что их резервное копирование было выполнено. Дата изменения должна указывать, было ли выполнено резервное копирование, и будет установлена предыдущая дата.
Если дата изменения - вчера, то выход не требуется. Если это не вчера, я хотел бы получить вывод в окне PowerShell или в текстовый файл, в зависимости от того, что будет проще.
Я также должен проверить, что папка не старше семи дней для каждого из 90 магазинов, с теми же критериями для вывода. Идея, которая у меня есть, будет такой для каждого магазина
Для магазина 1:
Check file date for \\server\store\computer\c:\folder\"newest modified date in folder"
if date equals yesterday
then do nothing
if date does not equal yesterday
then output "Test did not backup"
check folder modified date for \\server\sample\store\backupfolder
if date equals <7 days old
then do nothign
if date equals >7 days old
then output "test did not backup"
Извините за то, что я не доказал свои исследовательские усилия, я очень плохо знаком с Powershell, и у меня был крайний срок, чтобы сделать это. Со вчерашнего дня я научился делать все, что мне нужно было делать с этим сценарием. Спасибо @Keith за правильную настройку пути. В конечном итоге я использовал следующий код, чтобы выполнить свою цель - просто указать место, где результат был ложным.
$a = Get-ChildItem \\server\XXX\Received_Orders\*.* | Where{$_.LastWriteTime -ge (Get-Date).AddDays(-7)}
if ($a = (Get-ChildItem \\server\XXX\Received_Orders\*.* | Where{$_.LastWriteTime -ge (Get-Date).AddDays(-7)}))
{
}
Else
{
'STORE XXX HAS NOT RECEIVED ANY ORDERS IN THE PAST 7 DAYS'
}
$b = Get-ChildItem \\COMP NAME\Folder\*.* | Where{$_.LastWriteTime -ge (Get-Date).AddDays(-1)}
if ($b = (Get-ChildItem \\COMP NAME\TFolder\*.* | Where{$_.LastWriteTime -ge (Get-Date).AddDays(-1)}))
{
}
Else
{
'STORE XXX DID NOT RUN ITS BACKUP LAST NIGHT'
}
4 ответа
Если вы запустите команды Get-Item или Get-ChildItem, они выведут объекты System.IO.FileInfo и System.IO.DirectoryInfo, которые содержат эту информацию, например:
Get-Item c:\folder | Format-List
Или вы можете получить доступ к собственности прямо так:
Get-Item c:\folder | Foreach {$_.LastWriteTime}
Чтобы начать фильтровать папки и файлы по времени последней записи, вы можете сделать это:
Get-ChildItem c:\folder | Where{$_.LastWriteTime -gt (Get-Date).AddDays(-7)}
Чтобы получить дату изменения в одном файле, попробуйте:
$lastModifiedDate = (Get-Item "C:\foo.tmp").LastWriteTime
Для сравнения с другим:
$dateA= $lastModifiedDate
$dateB= (Get-Item "C:\other.tmp").LastWriteTime
if ($dateA -ge $dateB) {
Write-Host("C:\foo.tmp was modified at the same time or after C:\other.tmp")
} else {
Write-Host("C:\foo.tmp was modified before C:\other.tmp")
}
Вот что сработало для меня:
$a = Get-ChildItem \\server\XXX\Received_Orders\*.* | Where{$_.LastWriteTime -ge (Get-Date).AddDays(-7)}
if ($a = (Get-ChildItem \\server\XXX\Received_Orders\*.* | Where{$_.LastWriteTime -gt (Get-Date).AddDays(-7)}
#Im using the -gt switch instead of -ge
{}
Else
{
'STORE XXX HAS NOT RECEIVED ANY ORDERS IN THE PAST 7 DAYS'
}
$b = Get-ChildItem \\COMP NAME\Folder\*.* | Where{$_.LastWriteTime -ge (Get-Date).AddDays(-1)}
if ($b = (Get-ChildItem \\COMP NAME\TFolder\*.* | Where{$_.LastWriteTime -gt (Get-Date).AddDays(-1)))}
{}
Else
{
'STORE XXX DID NOT RUN ITS BACKUP LAST NIGHT'
}
Вы можете попробовать dirTimesJS.bat и fileTimesJS.bat
пример:
C:\>dirTimesJS.bat %windir%
directory timestamps for C:\Windows :
Modified : 2020-11-22 22:12:55
Modified - milliseconds passed : 1604607175000
Modified day of the week : 4
Created : 2019-12-11 11:03:44
Created - milliseconds passed : 1575709424000
Created day of the week : 6
Accessed : 2020-11-16 16:39:22
Accessed - milliseconds passed : 1605019162000
Accessed day of the week : 2
C:\>fileTimesJS.bat %windir%\notepad.exe
file timestamps for C:\Windows\notepad.exe :
Modified : 2020-09-08 08:33:31
Modified - milliseconds passed : 1599629611000
Modified day of the week : 3
Created : 2020-09-08 08:33:31
Created - milliseconds passed : 1599629611000
Created day of the week : 3
Accessed : 2020-11-23 23:59:22
Accessed - milliseconds passed : 1604613562000
Accessed day of the week : 4
Код PowerShell для поиска всех файлов библиотеки документов, измененных за последние 2 дня.
$web = Get-SPWeb -Identity http://siteName:9090/
$list = $web.GetList("http://siteName:9090/Style Library/")
$folderquery = New-Object Microsoft.SharePoint.SPQuery
$foldercamlQuery =
'<Where> <Eq>
<FieldRef Name="ContentType" /> <Value Type="text">Folder</Value>
</Eq> </Where>'
$folderquery.Query = $foldercamlQuery
$folders = $list.GetItems($folderquery)
foreach($folderItem in $folders)
{
$folder = $folderItem.Folder
if($folder.ItemCount -gt 0){
Write-Host " find Item count " $folder.ItemCount
$oldest = $null
$files = $folder.Files
$date = (Get-Date).AddDays(-2).ToString(“MM/dd/yyyy”)
foreach ($file in $files){
if($file.Item["Modified"]-Ge $date)
{
Write-Host "Last 2 days modified folder name:" $folder " File Name: " $file.Item["Name"] " Date of midified: " $file.Item["Modified"]
}
}
}
else
{
Write-Warning "$folder['Name'] is empty"
}
}