Перемещение файлов старше X дней не работает в Powershell - PullRequest
0 голосов
/ 19 марта 2020

У меня есть следующий код:

$dt         = Get-Date -format "MM-dd-yyyy"
$logFolder  = '\\192.168.20.151\user_backups\Veeam_Logs'
$source     = "$logFolder\*.log"; $destination = "$logFolder\Backup Logs [$dt]"
New-Item -ItemType Directory -Path $destination -Force
Move-Item ($source | Where LastWriteTime -gt (Get-Date).AddDays(-7)) $destination -Force

Я пытаюсь переместить * .log файлы в его текущем каталоге (не папки и не рекурсивные) в его подпапку, а только в эти файлы журнала которые старше 7 дней. По какой-то причине вышеприведенный код не работает, поскольку он все еще копирует файлы, возраст которых составляет 20 дней. Там нет ошибки.

Также я не хочу, чтобы он выдавал мне ошибки, если нет файлов * .log для копирования (или, по крайней мере, когда нет совпадения). -ErrorAction SilentlyContinue не работает по какой-то причине.

Ваша помощь приветствуется.

1 Ответ

2 голосов
/ 19 марта 2020

Чтобы выполнить условие для атрибута LastWriteTime, необходимо сначала вернуть FileInfoObject. Строка пути, переданная в Move-Item -Path, не будет иметь атрибута. Вы можете сделать что-то вроде следующего:

$dt         = Get-Date -format "MM-dd-yyyy"
$logFolder  = '\\192.168.20.151\user_backups\Veeam_Logs'
$destination = "$logFolder\Backup Logs [$dt]"
$source = Get-ChildItem -Path "$logFolder\*.log" | Where LastWriteTime -gt (Get-Date).AddDays(-7)
New-Item -ItemType Directory -Path $destination -Force
Move-Item -LiteralPath $source -Destination $destination -Force

$source здесь выполняет все условные логи c. Неясно, хотите ли вы, чтобы файлы были новее или старше определенной даты. Если вам нужны файлы, которые новее $date, вы можете использовать LastWriteTime -gt $date. Если вам нужны файлы старше $date, вам нужно будет использовать LastWriteTime -lt $date.


Вы можете иметь значение -Path для выполнения логики c, но вы должны передать выражение.

$dt         = Get-Date -format "MM-dd-yyyy"
$logFolder  = '\\192.168.20.151\user_backups\Veeam_Logs'
$destination = "$logFolder\Backup Logs [$dt]"
$source = Get-ChildItem -Path "$logFolder\*.log"
New-Item -ItemType Directory -Path $destination -Force
Move-Item -LiteralPath ($source | Where LastWriteTime -gt (Get-Date).AddDays(-7)) -Destination $destination -Force
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...