Простое резервное копирование через повершел
Потребовалось на повершеле написать скрипт резервного копирования файлов которые сделаны сегодня и вчера.
Для копирования есть функция — Copy-Item
Copy-Item "Что-то" -Destination "Куда-то" -forceВместо «куда-то» можно использовать переменную с папкой, например:
$path_new = "F:\backup\" #папка в которую копируем
$path = "\\FileServer\backup\" # папка из которой копируют, лежит на файл серверетогда скрипт будет как-то так:
Copy-Item "Что-то" -Destination $path_new -force #Копируем что-то в папку $path_newнапример, всё содержимое папки $path в папку $path_new
Copy-Item $path -Destination $path_new -force #Копируем всё содержимое папки $path в папку $path_new«Что-то» это файлы в определенной папке, созданные вчера. То есть файлы у которых дата создания отличается от сегодня на один день.
Определим дату с которой мы будем считать файлы
$date = (Get-Date).AddDays(-1) #определение в переменную даты минус сколько-то от текущей, в наем случае минус 1Теперь получим список всех файлов, в папке дата и время которых больше вчерашней даты.
есть особенность, что до версии powershell3, нужно писать так
$file_copy = Get-ChildItem -Path $path | Where-Object {$_.CreationTime -gT $date2} #определяем все файлы которые нужно скопировать
После версии powershell3, нужно писать так
$file_copy = Get-ChildItem -Path $path | Where-Object -Property CreationTime -gT $date #определяем все файлы которые нужно скопироватьУ меня установлена старая версия, поэтому я пишу скрипт по-старому
Get-ChildItem -Path $path | Where-Object {$_.CreationTime -gT $date} | Copy-Item -Destination $path_new -force #Копируем все файлы которые старше даты и времени $date из папки $path в папку $path_newЕще не хватает записи логов, чтобы понимать что и когда копировалось.
В статье «Используем лог-файлы в скриптах powershell» приводится скрипт который можно использовать:
$Logfile = $path_new+"log.txt" # определяем где лог-файл
function WriteLog #функиця записи в лог-файл
{
Param ([string]$LogString)
$Stamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
$LogMessage = "$Stamp $LogString"
Add-content $LogFile -value $LogMessage
}Функция WriteLog — дописывает лог-файл, тем что в нее передали, например список файлов.
Соберем скрипт полностью:
$path_new = "F:\backup\" #папка в которую копируем
$Logfile = $path_new+"log.txt" # определяем где лог-файл
function WriteLog #функиця записи в лог-файл
{
Param ([string]$LogString)
$Stamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
$LogMessage = "$Stamp $LogString"
Add-content $LogFile -value $LogMessage
}
$path = "\\FileServer\backup\" # папка из которой копируют
WriteLog "$path копирование начато"
$date = (Get-Date).AddDays(-1) #определение в переменную даты минус сколько-то от текущей
$file_copy = Get-ChildItem -Path $path | Where-Object {$_.CreationTime -gT $date} #определяем список файлов, для копирования и записи в лог-файл
WriteLog "$file_copy"
Get-ChildItem -Path $path | Where-Object {$_.CreationTime -gT $date} | Copy-Item -Destination $path_new -force #копирование файлов с текущей датой и временем старше -1
WriteLog "$path копирование закончено"