Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Унифицировать Скрипт копирования

Ответить
Настройки темы
PowerShell - [решено] Унифицировать Скрипт копирования

Новый участник


Сообщения: 24
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Всем привет. Помогите Унифицировать скрипт копирования бекапов 1с.
- Скрипт копирует файлы бекапов баз 1с (.dt или .zip) на сетевую шару
- Проверяет наличие скопированного файла на шаре
- Отправляет письмо о недостующих (не случившихся) бекапах
-------------------------------
Базы прибавляются слишком быстро, уже около 30. И просто неудобно каждый раз добавлять новую строку в скрипт.

Код: Выделить весь код
$date = (Get-Date -uformat "%d.%m.%Y")
$a = $b = $c = $d = $e = $f = $g = $h = $i = $j = $k = $m = $n = $o = $p = $q = $r = $s = $t = $x = $v = $u = $buh<HIDE> = $zup<HIDE> = $alpha = 0

copy-item c:\BackUP_1C\Alpha_<HIDE>\BackupTmp.zip \\<HIDE>\backup\1c\Alpha\Alpha_<HIDE>_$date.zip
copy-item c:\BackUP_1C\buh8\*.dt \\<HIDE>\backup\1c\buh8\Buh8_<HIDE>_$date.dt
copy-item c:\BackUP_1C\buh82\*.dt \\<HIDE>\backup\1c\buh82\Buh82_<HIDE>_$date.dt
copy-item c:\BackUP_1C\buhCKS8\BackupTmp.dt \\<HIDE>\backup\1c\buhCKS8\BuhCKS8_<HIDE>_$date.dt
copy-item C:\BackUP_1C\BuhCKS82\*.dt \\<HIDE>\backup\1c\BuhCKS82\BuhCKS82_<HIDE>_$date.dt
copy-item c:\BackUP_1C\crm\BackupTmp.dt \\<HIDE>\backup\1c\crm\CRM_<HIDE>_$date.dt
copy-item c:\BackUP_1C\eco\*.dt \\<HIDE>\backup\1c\eco\ECO_<HIDE>_$date.dt
copy-item c:\BackUP_1C\Kandidat\BackupTmp.dt \\<HIDE>\backup\1c\Kandidat\Kandidat_<HIDE>_$date.dt
copy-item c:\BackUP_1C\kredit\BackupTmp.dt \\<HIDE>\backup\1c\kredit\Kredit_<HIDE>_$date.dt
copy-item c:\BackUP_1C\orgteh\*.dt \\<HIDE>\backup\1c\orgteh\Orgteh_<HIDE>_$date.dt
copy-item c:\BackUP_1C\SpecOdejda\BackupTmp.zip \\<HIDE>\backup\1c\SpecOdejda\SpecOdejda_<HIDE>_$date.zip

copy-item c:\BackUP_1C\Strah\BackupTmp.zip \\<HIDE>\backup\1c\strah\Strah_<HIDE>_$date.zip
copy-item c:\BackUP_1C\traktir\*.dt \\<HIDE>\backup\1c\traktir\Traktir_<HIDE>_$date.dt
copy-item c:\BackUP_1C\ZikBuh\BackupTmp.zip \\<HIDE>\backup\1c\zikbuh7\ZikBuh7_<HIDE>_$date.zip
copy-item C:\BackUP_1C\ZikCKS7\BackupTmp.zip \\<HIDE>\backup\1c\zikCKS7\ZikBuhCKS7_<HIDE>_$date.zip
copy-item C:\BackUP_1C\zikeco\BackupTmp.dt \\<HIDE>\backup\1c\zikeco\ZikECO_<HIDE>_$date.dt
copy-item C:\BackUP_1C\zik<HIDE>NM\BackupTmp.zip \\<HIDE>\backup\1c\zik<HIDE>NM\Zik<HIDE>NM_<HIDE>_$date.zip
copy-item C:\BackUP_1C\Zik<HIDE>MY\BackupTmp.zip \\<HIDE>\backup\1c\Zik<HIDE>MY\Zik<HIDE>MY_<HIDE>_$date.zip
copy-item C:\BackUP_1C\zik<HIDE>RA\BackupTmp.zip \\<HIDE>\backup\1c\zik<HIDE>RA\Zik<HIDE>RA_<HIDE>_$date.zip
copy-item C:\BackUP_1C\ZupEco82\*.dt \\<HIDE>\backup\1c\ZupEco82\ZupEco82_<HIDE>_$date.dt
copy-item C:\BackUP_1C\BuhAru82\*.dt \\<HIDE>\backup\1c\BuhAru82\BuhAru82_<HIDE>_$date.dt
copy-item c:\BackUP_1C\ZikAru\BackupTmp.zip \\<HIDE>\backup\1c\ZikAru\ZikAru_<HIDE>_$date.zip
copy-item C:\BackUP_1C\Buh<HIDE>\*.dt \\<HIDE>\backup\1c\Buh<HIDE>\Buh<HIDE>_<HIDE>_$date.dt
copy-item C:\BackUP_1C\Zup<HIDE>\*.dt \\<HIDE>\backup\1c\Zup<HIDE>\Zup<HIDE>_<HIDE>_$date.dt
copy-item C:\BackUP_1C\alpha5\*.dt \\<HIDE>\backup\1c\alpha5\Alpha5_<HIDE>_$date.dt


if(!(Test-Path \\<HIDE>\backup\1c\alpha\Alpha_<HIDE>_$date.zip)){$a = "BackUP Alpha FAIL"}
if(!(Test-Path \\<HIDE>\backup\1c\buh8\Buh8_<HIDE>_$date.dt)){$b = "BackUP Buh8 FAIL"}
if(!(Test-Path \\<HIDE>\backup\1c\buh82\Buh82_<HIDE>_$date.dt)){$c = "BackUP Buh82 FAIL"}
if(!(Test-Path \\<HIDE>\backup\1c\buhCKS8\BuhCKS8_<HIDE>_$date.dt)){$d = "BackUP BuhCks8 FAIL"}
if(!(Test-Path \\<HIDE>\backup\1c\BuhCKS82\BuhCKS82_<HIDE>_$date.dt)){$e = "BackUP BuhCks82 FAIL"}
if(!(Test-Path \\<HIDE>\backup\1c\crm\CRM_<HIDE>_$date.dt)){$f = "BackUP CRM FAIL"}
if(!(Test-Path \\<HIDE>\backup\1c\eco\ECO_<HIDE>_$date.dt)){$g = "BackUP ECO FAIL"}
if(!(Test-Path \\<HIDE>\backup\1c\Kandidat\Kandidat_<HIDE>_$date.dt)){$h = "BackUP Kandidat FAIL"}
if(!(Test-Path \\<HIDE>\backup\1c\kredit\Kredit_<HIDE>_$date.dt)){$i = "BackUP Kredit FAIL"}
if(!(Test-Path \\<HIDE>\backup\1c\orgteh\Orgteh_<HIDE>_$date.dt)){$j = "BackUP Orgteh FAIL"}
if(!(Test-Path \\<HIDE>\backup\1c\SpecOdejda\SpecOdejda_<HIDE>_$date.zip)){$k = "BackUP SpecOdejda FAIL"}

if(!(Test-Path \\<HIDE>\backup\1c\strah\Strah_<HIDE>_$date.zip)){$m = "BackUP Strahovanie FAIL"}
if(!(Test-Path \\<HIDE>\backup\1c\traktir\Traktir_<HIDE>_$date.dt)){$n = "BackUP Traktir FAIL"}
if(!(Test-Path \\<HIDE>\backup\1c\zikbuh7\ZikBuh7_<HIDE>_$date.zip)){$o = "BackUP ZikBuh7 FAIL"}
if(!(Test-Path \\<HIDE>\backup\1c\zikCKS7\ZikBuhCKS7_<HIDE>_$date.zip)){$p = "BackUP ZikBuhCKS7 FAIL"}
if(!(Test-Path \\<HIDE>\backup\1c\zikeco\ZikECO_<HIDE>_$date.dt)){$q = "BackUP ZikECO FAIL"}
if(!(Test-Path \\<HIDE>\backup\1c\zik<HIDE>NM\Zik<HIDE>NM_<HIDE>_$date.zip)){$r = "BackUP Zik<HIDE>MN FAIL"}
if(!(Test-Path \\<HIDE>\backup\1c\Zik<HIDE>MY\Zik<HIDE>MY_<HIDE>_$date.zip)){$s = "BackUP Zik<HIDE>MY FAIL"}
if(!(Test-Path \\<HIDE>\backup\1c\zik<HIDE>RA\Zik<HIDE>RA_<HIDE>_$date.zip)){$t = "BackUP Zik<HIDE>RA FAIL"}

if(!(Test-Path \\<HIDE>\backup\1c\ZupEco82\ZupEco82_<HIDE>_$date.dt)){$x = "BackUP ZupEco82 FAIL"}
if(!(Test-Path \\<HIDE>\backup\1c\BuhAru82\BuhAru82_<HIDE>_$date.dt)){$v = "BackUP BuhAru82 FAIL"}
if(!(Test-Path \\<HIDE>\backup\1c\ZikAru\ZikAru_<HIDE>_$date.zip)){$u = "BackUP ZikAru FAIL"}
if(!(Test-Path \\<HIDE>\backup\1c\Buh<HIDE>\Buh<HIDE>_<HIDE>_$date.dt)){$buh<HIDE> = "BackUP Buh<HIDE> FAIL"}
if(!(Test-Path \\<HIDE>\backup\1c\Zup<HIDE>\Zup<HIDE>_<HIDE>_$date.dt)){$zup<HIDE> = "BackUP zup<HIDE> FAIL"}
if(!(Test-Path \\<HIDE>\backup\1c\Alpha5\Alpha5_<HIDE>_$date.dt)){$alpha = "BackUP alpha5 FAIL"}

if($a -eq $b -eq $c -eq $d -eq $e -eq $f -eq $g -eq $h -eq $i -eq $j -eq $k -eq $m -eq $n -eq $o -eq $p -eq $q -eq $r -eq $s -eq $t -eq $x -eq $v -eq $u -eq $buh<HIDE> -eq $zup<HIDE> -eq $alpha -eq 0)
{
Write-host "ALL Backups done"
Send-MailMessage -To "<HIDE>@ava-<HIDE>.ru" -Cc "<HIDE>@ava-<HIDE>.ru"  -From "report@ava-<HIDE>.ru" -Subject "BackUp SUCCESS!!!" -Body "ALL backups 1c done" -SmtpServer <HIDE>
}
Else {
Send-MailMessage -To "<HIDE>@ava-<HIDE>.ru"  -From "report@ava-<HIDE>.ru"  -Subject "BackUp FAIL!!!" -Body "$a
$b
$c
$d
$e
$f
$g
$h
$i
$j
$k
$m
$n
$o
$p
$q
$r
$s
$x
$t
$v
$u
$buh<HIDE>
$zup<HIDE>
$alpha" -SmtpServer <HIDE>
}


Была идея подключаться к серверам 1с и брать оттуда названия баз, подключаться к ним и бекапить. Но готового решения для работы с сервером 1с через powershell не нашел.

Отправлено: 07:18, 27-02-2015

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$date = (Get-Date -uformat "%d.%m.%Y")

$bad = @()

$base = @{
	"C:\BackUP_1C\Alpha_<HIDE>\BackupTmp.zip" = "\\<HIDE>\backup\1c\Alpha\Alpha_<HIDE>_$date.zip"
	"c:\BackUP_1C\buh8\*.dt" = "\\<HIDE>\backup\1c\buh8\Buh8_<HIDE>_$date.dt"
}

$base.GetEnumerator() | Foreach {
	$message = $_.Name + " - FAIL"
	try {
		Copy-Item $_.Name $_.Key -ErrorAction Stop
		if(!(Test-Path $_.Key)){
			$bad += $message
		}	
	}
	catch {
		$bad += $message 
	}
}

$body = $bad | Out-String

if(!$body)
{
	Write-host "ALL Backups done"
	Send-MailMessage -To "<HIDE>@ava-<HIDE>.ru" -Cc "<HIDE>@ava-<HIDE>.ru"  -From "report@ava-<HIDE>.ru" -Subject "BackUp SUCCESS!!!" -Body "ALL backups 1c done" -SmtpServer <HIDE>
}
Else {
	Send-MailMessage -To "<HIDE>@ava-<HIDE>.ru"  -From "report@ava-<HIDE>.ru" -Subject "BackUp FAIL!!!" -Body $body -SmtpServer <HIDE>
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:33, 27-02-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 24
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Базы при этом, все равно прописывать?
Может посчитать папки в C:\BackUP_1C\* ?

Отправлено: 08:55, 27-02-2015 | #3


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Да, прописывать. С таким успехом можно просто копировать папку copy-item c:\BackUP_1C.

Код: Выделить весь код
robocopy c:\BackUP_1C \\<HIDE>\backup\1c\ /s /e /log:C:\log.txt
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:00, 27-02-2015 | #4


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата red.army@vk:
Базы прибавляются слишком быстро, уже около 30. И просто неудобно каждый раз добавлять новую строку в скрипт. »
Заведите себе конфигурационный файл и работайте с ним.

Отправлено: 16:29, 27-02-2015 | #5


Новый участник


Сообщения: 24
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Код: Выделить весь код
$date = (Get-Date -uformat "%d.%m.%Y")
robocopy c:\BackUP_1C \\<HIDE>\backup\1c\ /s /e
Get-ChildItem \\<HIDE>\Backup\1c | foreach  {
Write-Host $_.name
Write-Host "\\<HIDE>\Backup\1c\$_\*$date*"
Test-Path -Path "\\<HIDE>\Backup\1c\$_\*$date*"
}
Почему $_ отрабатывает правильно, а $_.Name возвращает ИмяПапки.name и соответсвенно тест-патч всегда ложь?
Как при получении False сформировать массив имен папок для отправки на почту?

Как сформировать массив разобрался

Код: Выделить весь код
$date = (Get-Date -uformat "%d.%m.%Y")
#robocopy c:\BackUP_1C \\<HIDE>\backup\1c\ /s /e
$bad = @()
Get-ChildItem \\<HIDE>\Backup\1c | foreach  {
Write-Host $_.name
Write-Host "\\<HIDE>\Backup\1c\$_\*$date*"
$message = $_.name + " - FAIL"
if(!(Test-Path -Path "\\<HIDE>\Backup\1c\$_\*$date*")){
$bad += $message
}
}
$body = $bad | Out-String
$body

Последний раз редактировалось red.army@vk, 28-02-2015 в 13:19.


Отправлено: 13:06, 28-02-2015 | #6


Новый участник


Сообщения: 24
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Iska - расскажите пжст подробней...
Конф. файл к чему? 1с или POSH

Отправлено: 13:21, 28-02-2015 | #7


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Выполнить две команды и понять разницу, когда используются двойные кавычки(подробнее, как всегда в справке):
dir | Foreach {Write-Host "$_.Name"}

и

dir | Foreach {Write-Host "$($_.Name)"}


Не пойму зачем добавлять Test-Path, когда robocopy имеет прекрасный лог файл, который на порядок лучше этих бесполезных проверок.

Отправлено: 15:55, 28-02-2015 | #8


(*.*)


Сообщения: 36561
Благодарности: 6694

Профиль | Сайт | Отправить PM | Цитировать


Kazun, а зачем вообще здесь двойные кавычки?
Код: Выделить весь код
dir | Foreach {Write-Host $_.Name}
В этой↑ конструкции есть подвохи?

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 16:40, 28-02-2015 | #9


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата red.army@vk:
Iska - расскажите пжст подробней...
Конф. файл к чему? 1с или POSH »
К скрипту.

Как обычно — данные отдельно, код отдельно. Вместо того, чтобы:
Цитата red.army@vk:
добавлять новую строку в скрипт »
— Вы добавляете строку в конфигурационный файл. Скрипт при запуске читает его и работает со считанными из него данными. Формат его может быть произвольным: обычный текстовый файл, ini-файл, xml — какой наиболее удобным окажется, тот и пользуйте, я детально в Вашу задачу не вникал.

Отправлено: 19:29, 28-02-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Унифицировать Скрипт копирования

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Скрипт копирования баз Goodkid Скриптовые языки администрирования Windows 9 29-04-2013 17:14
SH скрипт копирования каталога ktotut Программирование в *nix 24 28-10-2012 20:50
CMD/BAT - Скрипт копирования по сети Forpost Скриптовые языки администрирования Windows 1 21-06-2010 17:06
Разное - Скрипт резервного копирования dividik Microsoft Windows 2000/XP 10 27-01-2009 12:45
Помогите написать скрипт копирования Filariel Программирование в *nix 7 17-11-2006 16:38




 
Переход