Задача: есть самописная программа, обновляемая перезаписью нового exe-файла. Установлена у более 10 пользователей в сетевую папку для каждого пользователя вида \\programs\userN\programma. Также в папку programma вложена папка install, в которой есть установочный файл с таким же именем, который требуется обновлять. Требуется из папки, в которой будет лежат новый файл и сам скрипт, запускать копирование в сетевые папки пользователей, причем в папке install не перезаписывать, обновленные файлы также не перезаписывать. То что файл обновлен, сверяем по размеру файла. Процесс нужно логировать.
Решение:
# сетевой каталог, в котором папки пользователей с программами
$PathToPrograms = "\\dfs\programs"
# файл должен лежать в каталоге запуска *.ps1
$FileForUpdate = "file.exe"
# вычисляем размер нового файла
$SizeFileForUpdate = (ls $FileForUpdate).Length
# формируем имя лога
$CurrentDate = Get-Date -Format "dd-MM-yyyy"
$PathLOG = "backup-" + $CurrentDate +".log"
# Создание пустого файла лога, с перезаписью при наличии старого
New-Item $PathLOG -ItemType file -Force
# не обновлять в папке install, не обновлять уже обновленные. Для лога печатаем полный путь и размер
ls $PathToPrograms -File $FileForUpdate -Recurse -Force | foreach `
# исключаем файлы, в пути содержащие install
{ if( -Not ([string]$_.FullName).Contains("install") -and `
$_.Length -ne $SizeFileForUpdate) `
# логирование полного пути и размера файла до копирования
{Out-File -FilePath $PathLOG -InputObject $_.Fullname, "Было: ", $_.Length `
-Append -encoding unicode
# логирование через конвеер, PassThru - выводит подробную информацию
Copy-Item $FileForUpdate -Destination $_.FullName -PassThru | `
Out-File -FilePath $PathLOG -Append -encoding unicode } }
Комментариев нет:
Отправить комментарий