Как искать внутри трех путей и скопировать имя в файл file.list - PullRequest
0 голосов
/ 07 июня 2018

Мне интересно, есть ли лучший способ сделать скрипт на PowerShell с такими инструкциями:

  1. Поиск по 3 путям.Пример.

    $LOGDIRS="C:\NETiKA\GED\Production\RI\log";"C:\NETiKA\GED\Test\RI\log";"C:\NETiKA\Tomcat-8.0.28\logs" 
    
  2. Найдите все файлы старше 7 дней и скопируйте файл, который я назову file.list.EX.> C: \ Test \ file.list

  3. Когда я копирую свой file.list, мне нужно найти все имена файлов и удалить их.

Очевидно, когда у вас есть более тысячи файлов, это самый быстрый способ удаления.

$LOGDIRS=C:/NETiKA/GED/Production/RI/log;C:/NETiKA/GED/Test/RI/log;C:/NETiKA/Tomcat-8.0.28/logs
$KEEP=-7

Get-ChildItem -Path $LOGDIRS -Recurse -Directory -Force -ErrorAction SilentlyContinue |
    Select-Object FullName > files.list |
    Foreach-Object {
        if ($_.LastAccessTime -le (get-date).adddays($KEEP)) {
            remove-item -recurse -force $_
        }
    };

Ответы [ 2 ]

0 голосов
/ 07 июня 2018
  • Remove-Item принимает ввод по каналу и
  • Где будет фильтроваться возраст
  • , чтобы сначала проверить, что будет удалено. Я добавил -WhatIfк Remove-Item

$LOGDIRS="C:\NETiKA\GED\Production\RI\log","C:\NETiKA\GED\Test\RI\log","C:\NETiKA\Tomcat-8.0.28\logs"
$KEEP=-7

Get-ChildItem -Path $LOGDIRS -Recurse -Directory -Force -ErrorAction SilentlyContinue |
    Where-Object LastAccessTime -le ((get-date).AddDays($KEEP)) 
        Remove-Item -Recurse -Force $_ -Whatif
0 голосов
/ 07 июня 2018

Нечто подобное должно помочь вам начать.

$path1 = "E:\Code\powershell\myPS\2018\Jun"
$path2 = "E:\Code\powershell\myPS\2018\Jun\compareTextFiles"
$path3 = "E:\Code\powershell\myPS\2018\May"
$allFiles = dir $path1, $path2, $path3 -File

$fileList = New-Item -type file file.list -Force

$keep = -7
$allFiles | foreach {
    if ($_.LastAccessTime -le (Get-Date).AddDays($keep)) {
        "$($_.FullName) is older than 7 days"
        $_.FullName.ToString() | Out-File $fileList -Append
    }
    else {
        "$($_.FullName) is new"
    }
}

Вы можете добавить удаление в коде в IF Block, если хотите, или проверить файл и сделать это позже.В вашем коде есть много проблем, которые являются основными для PowerShell, например: если вы используете Select-Object, следующий конвейер получит только выбранное вами свойство.Вы попытались использовать LastAccessTime в более позднем канале, когда выбрали только свойство FullName.

Кроме того, перенаправление в файл и повторное использование конвейера выглядит очень грязно.

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