Поиск измененной даты файла/папки
Я очень новичок в PowerShell, и я надеялся, что смогу помочь в создании script, который сообщает мне измененную дату файла.
Жаль, что я больше не знал о 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, и у меня был крайний срок, чтобы сделать это. Со вчерашнего дня я научился делать все, что мне нужно было сделать с этим script. Спасибо @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'
}
Ответы
Ответ 1
Если вы запустите команды 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)}
Ответ 2
Чтобы получить измененную дату в одном файле, попробуйте:
$lastModifiedDate = (Get-Item "C:\foo.tmp").LastWriteTime;
Для сравнения:
$dateA= Get-Date $lastModifiedDate
$dateB= Get-Date (Get-Item "C:\other.tmp").LastWriteTime
if ($dateA -gte $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")
}
Ответ 3
Вот что сработало для меня:
$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'
}
Ответ 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"
}
}