Скрипт Powershell для определения возраста файла из массива - PullRequest
0 голосов
/ 12 января 2019

Я работаю над сценарием powershell для чтения атрибутов файлов, отфильтрованных по CreationTime, для нескольких общих ресурсов. Сценарии работают, время от времени. Это прекрасно работает, когда я использую один путь, но я получаю смешанные результаты, когда добавляю пути к папкам в массив. Самый тревожный результат - когда он успешно находит и читает весь путь, а затем включает все в c: windows \ system32. Та же самая аномалия, когда акции пусты.

Итак, что я хочу сделать, это:

  1. Читать список акций
  2. Считывание содержимого каждого общего ресурса, отфильтрованного по атрибутам CreationTime и Archive.
  3. Сохранить результаты в CSV-файле.
  4. Если файл не пустой, записать результаты в журнал событий.

вот код

$timer = (Get-Date -Format yyy-MM-dd-HHmm)
$Date=(Get-Date).AddHours(-3)
$FolderList = "C:\Software\Scripts\FolderList.txt"
$Folders = get-content $FolderList
$Filepath = "C:\Software\Scripts"
$filename = "$Filepath\" + $timer + "OldFiles.csv"

foreach ($Folder in $Folders)

{
Get-ChildItem $Folder | Where-Object { $_.CreationTime -lt $Date -and $_.Attributes -band [System.IO.FileAttributes]::Archive} | Select Attributes, CreationTime, Fullname | Export-Csv -Path $filename -NoTypeInformation
}

if ( (get-childitem $filename).length -eq 0 )

{

exit
}


  else{

#Write to OpsMgr Log
$Message = get-content $filename 
Write-EventLog -LogName "Operations Manager" -Source "Health Service Script" -EventID 402 -EntryType Information -Message "Old files found. $Message"

}

1 Ответ

0 голосов
/ 12 января 2019

Этот (непроверенный) скрипт может делать то, что вы хотите:

$Date = (Get-Date).AddHours(-3)

$FolderList = "C:\Software\Scripts\FolderList.txt"
$Folders    = Get-Content $FolderList
$Filepath   = "C:\Software\Scripts"

$timer    = (Get-Date -Format yyyy-MM-dd-HHmm)
$filename = Join-Path $Filepath ("{0}_OldFiles.csv" -f $timer)

$Data = foreach ($Folder in $Folders){
    Get-ChildItem $Folder | 
      Where-Object { $_.CreationTime -lt $Date -and 
                     $_.Attributes -band [System.IO.FileAttributes]::Archive} | 
        Select Attributes, CreationTime, Fullname 
}


if ($Data.Count){
    #Write to OpsMgr Log
    $Data | Export-Csv -Path $filename -NoTypeInformation
    $Message = $Data | ConvertTo-Csv
    Write-EventLog -LogName "Operations Manager" -Source "Health Service Script" `
                   -EventID 402 -EntryType Information `
                   -Message "Old files found. $Message"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...