Get-ChildItem, список файлов, которые соответствуют определенным параметрам, а затем Remove-Item - PullRequest
0 голосов
/ 24 октября 2018

У меня есть следующий скрипт, который отлично работает, перечисляя файлы-кандидаты для удаления.Но я не могу понять, где или как добавить инструкцию Remove-Item, чтобы фактически удалить файлы, не теряя файл экспорта.Между прочим, журнал Write-Host не удовлетворяет, так как мне нужно записать размер файлов, время последней записи и т. Д. Это должен быть экспорт CSV (как тот, который у меня есть с этим сценарием).

Конечно, я могу перезапустить Get-ChildItem и вместо этого перейти к Select-Object, передать к Remove-Item, но это будет означать большую потерю времени.

Мой сценарий:

$EXTERNALFILE = "C:\DataCleaning\Scripts\FilesToRemove.txt"
$DESTINATION_DIR = "C:\DataCleaning\Logs\"
$LOGFILECSV = "${DESTINATION_DIR}\Removed_$(Get-Date -f yyyy-MM-dd_hh-mm-ss).csv"

$List = Get-Content $EXTERNALFILE

$REPORT = foreach ($Data in $List) {
    $Data = $Data -split(';')
    $SOURCEDIR = $Data[0]
    $FILTERMASK = $Data[1]
    $RETENTION = (Get-Date).AddMonths(-$Data[2])

    Get-ChildItem -LiteralPath $SOURCEDIR -File -Recurse |
        Where-Object {($_.LastWriteTime –lt $RETENTION) -and ($_.Extension -notmatch $FILTERMASK)} |
        Select-Object FullName, LastWriteTime, CreationTime,
            @{Name="Size (MB)";Expression={[Math]::Round($_.Length /1MB, 2)}},
            @{Name="Age (Days)";Expression={(((Get-Date) - $_.LastWriteTime).Days)}}
}

$REPORT | Export-Csv -Delimiter "|" -NoTypeInformation -Encoding UTF8 -Path $LOGFILECSV

1 Ответ

0 голосов
/ 24 октября 2018

Есть несколько решений, что-то простое:

Remove-Item -Path $REPORT.FullName

Remove-item принимает массив строк для параметра -path

Remove-Item [-Path] <string[]>

Если вы хотите выполнить Remove-Item внутри foreach цикла:

Get-ChildItem -LiteralPath $SOURCEDIR -File -Recurse |
    Where-Object ... |
        ForEach-Object {
            Remove-Item $_
            $_
        } | Select-Object ...
...