Добрый день!
Изначальная задача - очистка файлового сервера от старых файлов.
Разбил ее на 2 этапа, на первом формирую через powershell csv со списком файлов у которых LastAccessTime и LastWriteTime больше двух лет, получаю файл с примерно 3000000 строк.
Для второго этапа набросал вот такой скрипт, если вкратце, берет строку, меняет ее начало, отрезает имя файла и результат использует в качестве папки назначения, скрипт еще попутно ведет лог того что перенесено (потом добавили условие что ексельки не надо переносить).
$Paths = Import-Csv -Path ‘C:\temp\OldFiles.csv’ -Delimiter ‘;’
$Paths = $Paths.FullName
$Copylog = «C:\temp\copylog_all.csv»
foreach ($Path in $Paths){
foreach ( $Newpath in $Path){
If ($Path.Substring(0,2) -eq «\\») {$Newpath = («\\?\Y:» + $Path.Remove(0,12))}
$Destpath = Split-Path $Newpath -Parent
$Item = Move-Item -Path $Path -Destination $Destpath -Exclude *.xl* -PassThru -Verbose
$Item |Select-Object fullname | Export-Csv -Force -Path $Copylog -Encoding UTF8 -Delimiter «;» -NoTypeInformation -Append
}
}
путь в файле примерно такого вида
«\\?\D:\00000\111111\2222\33333\44444\55555\6666\777777\888888.pdf»
Структура папок на новом диске полностью перенесена со всеми группами доступа.
Проблема в том что PowerShell обрабатывает этот скрипт очень медленно, за 2 недели прошел порядка 1кк строк.
Пытался использовать foreach-object -paralell, но в workflow мой скрипт просто ничего не делает.
Главный вопрос: "Как ускорить процесс переноса?"