рекурсивно проверять все папки и экспортировать список папок, в которых не было созданного файла резервной копии в течение последних 24 часов - PullRequest
0 голосов
/ 23 мая 2018

Существует папка с файлами резервных копий базы данных.Мне нужно рекурсивно проверить все папки и экспортировать список последних файлов резервных копий в каждой папке.

У меня есть код, содержащий мою идею.просто я должен добавить эту часть: -проверьте для каждого выбранного файла (выбранный файл является последним созданным файлом резервной копии), если время создания файла старше 24 часов, экспорт в CSV-файл.

Заранее спасибо

[Cmdletbinding()]
param(
  [Parameter(Position=0,Mandatory=$false,ValueFromPipeline=$true)]$path=
  "\F:\backups",
  [Parameter(Position=1,Mandatory=$false,ValueFromPipeline=$true)]
$OutPutFilepath=
"f:\backup-daily.csv" 
)

function Get-LastestWroteFile{
   [Cmdletbinding()]
    param(
        [Parameter(Position=0,Mandatory=$true)]$Folder
    )
    begin{
        $Latest = Get-ChildItem $Folder.FullName -File | select FullName, 
CreationTime, LastAccessTime, LastWriteTime, Attributes,  @{N='SizeInMb';E= 
{$_.Length/1mb}},Name | Sort-Object CreationTime | select -Last 1
    }
    process{

    }
    end{
        #new custom object with 3 props.
       if($Latest){
            return New-Object PSobject -Property @{"FullName"=$latest.Name; 
      LastWriteTime = 
$latest.LastWriteTime;"Folder"=$folder.FullName;"SizeInMB" = 
[math]::Round($Latest.SizeInMB,3)} #FileInfo=$Latest; }
        }
   }
}

$OutPut=@()
Get-ChildItem -Directory -Path $path -Recurse | foreach{
    $OutPut+= Get-LastestWroteFile $_
}

$OutPut | ConvertTo-Csv -NoTypeInformation -delimiter '|' | Out-File - 
FilePath $OutPutFilepath

1 Ответ

0 голосов
/ 24 мая 2018

расширенная функция не требуется, попробуйте ниже

Get-ChildItem -Path $Path -Recurse -File | Where-Object -FilterScript {
    ([Datetime]::Now - $_.CreationTime ).Hours -gt 24
} | Select-Object -Property Name,LastWriteTime,FullName,@{N='SizeInMb';E= 
{$_.Length/1mb}},
...