collapse

Reklama


Autor Wątek: Bezpieczna kopia?  (Przeczytany 12967 razy)

0 użytkowników i 2 Gości przegląda ten wątek.

Offline mpi

  • Ekspert
  • *****
  • Wiadomości: 3356
  • Pomógł? 116
  • Kujawsko-Pomorskie
Bezpieczna kopia?
« dnia: Marca 24, 2016, 14:57:22 pm »
Chcę żeby użytkownicy mogli robić kopię na pendrive. Przykładowo jedyny komputer w całej przychodni stoi w rejestracji i na nim jest baza.

Użytkownik w windows jest jeden - bez hasła (hasła są w PPS) + administrator z hasłem. Zabezpieczony katalog baza oraz backup (dostęp tylko dla SYSTEM i administratora). Pytanie na ile jest to bezpieczne. Szyfrujecie dane na dyskach na wypadek podłączenia ich do innego sprzętu?

Z kopią było trochę zabawy. Katalog z bazą i backupem zabezpieczony na hasło no i drugie hasło do szyfrowania backupu również nie może być znane. Najłatwiej zrobić cobianem ale nie chciałem na sztywno godziny ustawiać a jak się pozwoli użytkownikowi na dostęp do GUI (żeby ręcznie odpalać) to może namieszać.
Kombinowałem z usługami, harmonogramem zadań i ręcznym wykonywaniem ale nic nie wychodziło.

I znalazłem magiczne runas :) wpisane za pierwszym razem poświadczenia są zapamiętywane do zmiany hasła przez administratora. Widzi ktoś w tym jakieś zagrożenie?

Skrypt bat tworzy kopię, pakuje ją razem z szyfrowaniem do 7z, szuka na jakiej literze jest pendrive a jak nie znajdzie to krzyczy żeby włożyć i kopiuje na pendrive.

Kto ma jakieś zastrzeżenia to proszę pisać żebym szybko zmienił :)

A jak ktoś chce skrypt do backupu (wg Kamsoft tym poleceniem można nawet w trakcie pracy robić w przeciwieństwie do backupu z programu), z szyfrowaniem i kopiowaniem na pena to niech pisze to wkleję.
« Ostatnia zmiana: Marca 24, 2016, 16:02:10 pm wysłana przez mpi »

Offline daro7777

  • Początkujący
  • *
  • Wiadomości: 33
  • Pomógł? 4
Odp: Bezpieczna kopia?
« Odpowiedź #1 dnia: Marca 24, 2016, 19:04:42 pm »
Jeśli można, to ja ten skrypt poproszę

Offline mpi

  • Ekspert
  • *****
  • Wiadomości: 3356
  • Pomógł? 116
  • Kujawsko-Pomorskie
Odp: Bezpieczna kopia?
« Odpowiedź #2 dnia: Marca 24, 2016, 19:40:25 pm »
skrypt.bat to ten tworzący kopię. Może być w katalogu do którego nie ma dostępu zwykły użytkownik (są tu hasła). Pogrubione i pochylone wartości trzeba wpisać swoje. Pogrubione ale nie pochylone jak kto woli.

runas.bat wgrywa się gdzieś gdzie ma dostęp użytkownik (można na pulpicie dać skrót do tego pliku). Przy pierwszym odpaleniu powinien się pojawić monit o hasło. Ja dałem brak możliwości modyfikacji tego pliku przez użytkowników ale mogą go skopiować, jednak nawet jak wpisze w skopiowany plik inny program to nic się nie stanie gdyż pojawi się ponowny monit o hasło.

Trzeba pobrać 7zip http://www.7-zip.org/download.html wersja 9.20 7-Zip Command Line Version i wgrać do katalogu backup

Jak by coś nie tak było to pytaj bo teraz trochę zmian wprowadziłem (wszystkie zmienne wyciągnąłem, żeby łatwiej go było dostosować dla siebie) i może gdzieś jakąś literówkę zrobiłem.
Sprawdzone na Win7 Pro

Skrypt na siłę woła USB, jak się chce przerwać trzeba zamknąć konsolę. Można się pobawić i zadać pytanie użytkownikowi czy chce przerwać zamiast oczekiwania na pendrive.

EDIT: jak bardzo przeszkadza bałagan w okienku podczas tworzenia kopii (jak przewijają się wszystkie tabele itp) to chyba można dołożyć logi i wtedy zamiast na konsoli wszystko się do pliku wpisuje.

Cytat: skrypt.bat
@echo off
FOR /f "tokens=1-3 delims=- " %%a IN ('date/t') DO (
     SET _yr=%%a
     SET _mh=%%b
     SET _dy=%%c
)
FOR /f "tokens=1-4 delims=: " %%a IN ('time/t') DO (
     SET _hr=%%a
     SET _ms=%%b
)

SET _fname=jakas_nazwa_pliku_z_kopia_dalej_jest_data_i_godzina_%_yr%%_mh%%_dy%%_hr%%_ms%
SET _dbackup=c:\siezka\do\katalogu\backup(zakonczona slashem)\
SET _database=c:\sciezka\do\pliku\kspps.fdb
SET _pass=haslo_do_szyfrowania_plików_z_kopiami
SET _qbak=C:\Program Files (x86)\Firebird\Firebird_2_0\bin\gbak.exe
SET _udb=SYSDBA
SET _pdb=masterkey
SET _extb=.bak
SET _extz=.7z

echo Trwa tworzenie kopii bazy danych...
echo .
echo .
if exist %_dbackup%%_fname%%_extb% (del %_dbackup%%_fname%%_extb%)
"%_qbak%" -v -t -user %_udb% -password %_pdb% %_database% %_dbackup%%_fname%%_extb%
echo .
echo .
echo Trwa kompresowanie kopii bazy danych...
if exist %_dbackup%%_fname%%_extz% (del %dbackup%%_fname%%_extz%)
"%_dbackup%7za.exe" a -mx -mhe -P%_pass% %_dbackup%%_fname%%_extz% %_dbackup%%_fname%%_extb%
DEL /Q %_dbackup%%_fname%%_extb%
echo .
echo .

:FINDUSB
echo Trwa wyszukiwania nosnika USB
for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (

   if %%l equ 2 (
   echo Nosnik USB to %%i
   SET _usb=%%i
   goto COPYUSB
   )
)
echo "Nie znaleziono nosnika USB, wloz nosnik i nacisnij dowolny klawisz"
echo .
pause
goto FINDUSB


:COPYUSB
echo .
echo .
echo Trwa kopiowanie archiwizacji na nosnik USB.
xcopy %_dbackup%%_fname%%_extz%  %_usb%
echo .
echo Kopia zakonczona
pause

Cytat: runas.bat
runas.exe /user:nazwa_uzytkownika_z_odpowiednimi_uprawnieniami /savecred c:\sciezka\do\skrypt.bat
« Ostatnia zmiana: Marca 25, 2016, 17:41:20 pm wysłana przez mpi »

Offline daro7777

  • Początkujący
  • *
  • Wiadomości: 33
  • Pomógł? 4
Odp: Bezpieczna kopia?
« Odpowiedź #3 dnia: Marca 24, 2016, 21:23:42 pm »
Przetestuję dopiero po Świętach i napiszę jak poszło. Bo taki
...jedyny komputer w całej przychodni stoi w rejestracji i na nim jest baza.
właśnie w jednym poz mam. Dzięki za pomoc.
pozdrawiam.

Offline mpi

  • Ekspert
  • *****
  • Wiadomości: 3356
  • Pomógł? 116
  • Kujawsko-Pomorskie
Odp: Bezpieczna kopia?
« Odpowiedź #4 dnia: Marca 25, 2016, 17:42:59 pm »
poprawiłem jeden błąd - był brak ścieżki do pliku bak podczas usuwania (po spakowaniu).

Offline mpi

  • Ekspert
  • *****
  • Wiadomości: 3356
  • Pomógł? 116
  • Kujawsko-Pomorskie
Odp: Bezpieczna kopia?
« Odpowiedź #5 dnia: Kwietnia 05, 2016, 09:52:14 am »
Hmmmm dziś zostałem poinformowany o trochę innych przełącznikach podczas robienia kopii.
Ja wcześniej używałem -v -t, natomiast doszło -ig -b i zostało -v
-b - to jest chyba domyślne (backup)?
- ig - ignoruje uszkodzone nagłówki. Kiedyś w starym fixie miałem -ig ale potem dostałem już bez tego przełącznika

Zna się ktoś na tym?

Zastanawia mnie jeszcze jedno. Dlaczego na wszystkich polskich stronach dotyczących robienia kopii bazy firebird zaznacza się, żeby ją robić jak użytkownicy nie pracują w systemie?
Natomiast na zagranicznych:
Gbak creates a consistent backup of the database by starting a transaction that spans the backup period. When the backup is complete, the transaction is ended and this means that the backup process can be run while users are working in the database.
GBAK is able to perform a backup while the database is running. There is no need to shut down the database during a GBAK backup. GBAK will create a consistent snapshot of the database at the time it starts running.

Na ile rozumiem język angielski (a bardzo słabo go rozumiem :) ) to robienie kopii otwartej bazy jest niebezpieczne ale tylko jak się używa innych niż qbak narzędzi?

Before you consider using other tools to take a backup of your Firebird database, make sure that you know what the tools do and how a running database will be affected by them. For example, if you use Winzip to create a compressed copy of a database and you do it when users are accessing the system, the chances of a successful restore of that database are slim. You must either always use the gbak or nbackup tools which know how the database works, or, use gfix to shut the database down completely before you even attempt to backup the database file(s).

Offline Profesor Wilczur

  • Ekspert
  • *****
  • Wiadomości: 862
  • Pomógł? 81
  • W-M OW NFZ
Odp: Bezpieczna kopia?
« Odpowiedź #6 dnia: Kwietnia 06, 2016, 07:58:55 am »
Zastanawia mnie jeszcze jedno. Dlaczego na wszystkich polskich stronach dotyczących robienia kopii bazy firebird zaznacza się, żeby ją robić jak użytkownicy nie pracują w systemie?
Z cytatów 1 i 2 wynika jednoznacznie, że gbak może działać na otwartej bazie.

Ostatni cytat mówi o "zimnej kopii" plików bazy. Oczywistym jest to, że przed takim backupem należałoby zamknąć bazę  ;)

Offline mpi

  • Ekspert
  • *****
  • Wiadomości: 3356
  • Pomógł? 116
  • Kujawsko-Pomorskie
Odp: Bezpieczna kopia?
« Odpowiedź #7 dnia: Kwietnia 06, 2016, 09:25:42 am »
Ja wiem co tam jest napisane :). Chodziło mi tylko o to, że cokolwiek by nie znaleźć odnośnie bazy firebird na stronach PL to zawsze przestrzegają, żeby nie robić kopii (przy użyciu qbak) na otwartej bazie.

Fakt, że kopii KS-PPS za pomocą dołączonego narzędzia KSKopiaBezp.exe nie powinno się robić na otwartej bazie ale to dlatego, że wykorzystuje jakieś stare narzędzia.

Offline mpi

  • Ekspert
  • *****
  • Wiadomości: 3356
  • Pomógł? 116
  • Kujawsko-Pomorskie
Odp: Bezpieczna kopia?
« Odpowiedź #8 dnia: Kwietnia 11, 2016, 16:08:18 pm »
Ok. W związku z tym, że chyba jednak te parametry -ig -b (zwłaszcza -ig) mnie przekonały a nie chce mi się za każdym razem we wszystkich skryptach zmieniać poleceń stworzyłem jeden skrypt.
Jak uruchamia się go bez parametrów - domyślnie jest to kopia na usb i do nazwy pliku dodaje przedrostek u.
Uruchomiony z parametrem (np. ręczne tworzenie kopii do wybranej lokalizacji, lub automatyczne z harmonogramu zadań) obojętnie jakim (np. a jak auto :)) dodaje przedrostek a. Drugi parametr wskazuje miejsce gdzie skrypt ma skopiować archiwum (np: c:\ks\backup\kopia.bat a \\192.168.5.5\backup\).
Dodatkowo skrypt weryfikuje archiwum 7zip i niektóre informacje zapisuje do logów.
Ponadto zamiast wyświetlać wszystko na ekran logi dałem do pliku i pakowane są dwa pliki - backup i log.

Cytuj
@echo off

if [%1] EQU [] (
   SET _par1=u
) else (
   SET _par1=%1
)

for /f "tokens=1-3 delims=- " %%a IN ('date/t') do (
     SET _yr=%%a
     SET _mh=%%b
     SET _dy=%%c
)

for /f "tokens=1-4 delims=: " %%a IN ('time/t') do (
     SET _hr=%%a
     SET _ms=%%b
)

:-------- Parametry do ustawienia -------------------------------

SET _bakname=%_par1%_backup_%_yr%%_mh%%_dy%%_hr%%_ms%
SET _bakdir=D:\KS\BACKUP\
SET _database=D:\KS\KSPPS.FDB

SET _passu=haslo1 (szyfrowanie kopii na usb)
SET _passa=haslo2 (szyfrowanie kopii innej niz usb)

SET _qbak=C:\Program Files\Firebird\Firebird_2_5\bin\gbak.exe

SET _udb=SYSDBA
SET _pdb=masterkey
SET _bakext=.bak
SET _zipext=.7z
SET _logext=.txt

:---------------------------------------------------------------


if %_par1% EQU u (
      SET _pass=%_passu%
) else (
      SET _pass=%_passa%
)

echo ********************************************** >> %_bakdir%%_par1%_log.txt
echo %date% %time% %_bakname% >> %_bakdir%%_par1%_log.txt
echo ********************************************** >> %_bakdir%%_par1%_log.txt
   
echo Tworzenie kopii bazy danych, prosze czekac...
if exist %_bakdir%%_bakname%.* (del %_bakdir%%_bakname%.*)
"%_qbak%" -v -b -ig -user %_udb% -password %_pdb% %_database% %_bakdir%%_bakname%%_bakext% -Y %_bakdir%%_bakname%%_logext%
echo Kompresowanie kopii bazy danych, prosze czekac...
"%_bakdir%7za.exe" a -mx -mhe -P%_pass% %_bakdir%%_bakname%%_zipext% %_bakdir%%_bakname%.* > nul
echo Weryfikowanie archiwum...
"%_bakdir%7za.exe" t -P%_pass% %_bakdir%%_bakname%%_zipext% >> %_bakdir%%_par1%_log.txt

del %_bakdir%%_bakname%%_bakext%
del %_bakdir%%_bakname%%_logext%

if %_par1% EQU u goto USB

if [%2] EQU [] (
   Echo Blad: Nie podano sciezki w parametrze - archiwum nie skopiowane >> %_bakdir%%_par1%_log.txt
   goto END
)
   
if exist %2 (
   echo Kopiowanie archiwizacji do wybranej lokalizacji...
    xcopy %_bakdir%%_bakname%%_zipext%  %2
   echo Kopia do %2 >> %_bakdir%%_par1%_log.txt
) else (
   echo Bledna sciezka, archiwizacja nie zostala skopiowana w podane miejsce.
   echo Blad: Bledna sciezka %2 - archiwum nie skopiowane>> %_bakdir%%_par1%_log.txt
)
goto END

:USB
  echo Wyszukiwania nosnika USB...
  for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (

   if %%l equ 2 (
   echo Znaleziony nosnik USB to %%i
   SET _usb=%%i
   goto COPYUSB
   )
  )
  echo Nie znaleziono nosnika USB.
  echo  -Jesli chcesz kontynuowac, zainstaluj nosnik USB i nacisnij [ENTER].
  SET _answer=A
  SET /P _answer= -Jesli chcesz przerwac nacisnij klawisz [Q] a nstepnie [ENTER]:
  if /i [%_answer%] EQU [Q] (
   echo Zrezygnowano z kopii na nosnik USB.
   echo Blad: Nie skopiowano na nosnik USB >> %_bakdir%%_par1%_log.txt
   goto END
  )
  goto USB


:COPYUSB
 echo Kopiowanie archiwizacji na nosnik USB...
 xcopy %_bakdir%%_bakname%%_zipext%  %_usb%
 Echo Skopiowano na nosnik %_usb% >> %_bakdir%%_par1%_log.txt

:END
echo .
echo .
echo Zakonczono tworzenie kopii.
pause
« Ostatnia zmiana: Kwietnia 11, 2016, 16:14:44 pm wysłana przez mpi »

Offline Michał

  • ForumPPS.pl
  • Administrator
  • Ekspert
  • *****
  • Wiadomości: 3191
  • Pomógł? 102
  • Kujawsko-Pomorski OW
    • NZOZ "ARS MEDICA" Przychodnia Lekarska
Odp: Bezpieczna kopia?
« Odpowiedź #9 dnia: Kwietnia 11, 2016, 20:27:54 pm »
Skoro nikt jeszcze tego nie zrobił to będę pierwszy: DZIĘKUJĘ!. Dodane do mojej listy "do zrobienia/wykorzystania jak będzie chwila wolna :)".
Pozdrawiam
Michał (michalszy)

Offline mpi

  • Ekspert
  • *****
  • Wiadomości: 3356
  • Pomógł? 116
  • Kujawsko-Pomorskie
Odp: Bezpieczna kopia?
« Odpowiedź #10 dnia: Kwietnia 12, 2016, 00:44:09 am »
tylko jest jeden problem - niestety myliłem się, myślałem że poświadczenia wykorzystując runas są zapamiętywane tylko dla danego programu/skryptu a jednak nie. Musiałem z tego zrezygnować.
Zrobiłem pewne rozwiązanie aczkolwiek nie do końca bezpieczne dlatego nie mówię jakie :). Jak będę miał chwilkę to sobie programik jakiś napiszę, który będzie mi odpalał skrypt z uprawnieniami administratora.

Póki co najbezpieczniejsze rozwiązanie to chyba odpalić skrypt w harmonogramie zadań. Niestety jest on uruchamiany w innej sesji i użytkownik nie widzi okna konsoli. Musi wiedzieć że np. o 17:00 codziennie pendrive wkładać :)

Offline mpi

  • Ekspert
  • *****
  • Wiadomości: 3356
  • Pomógł? 116
  • Kujawsko-Pomorskie
Odp: Bezpieczna kopia?
« Odpowiedź #11 dnia: Kwietnia 25, 2016, 14:15:06 pm »
Ma ktoś jakąś uszkodzoną bazę? Chciałbym sprawdzić jakie komunikaty się generują przy robieniu kopii, czy jest jakiś error - robię ciekawy skrypcik łącznie z interfejsem GUI. Wszystko edytowalne w VBS, JS i HTML

Offline mpi

  • Ekspert
  • *****
  • Wiadomości: 3356
  • Pomógł? 116
  • Kujawsko-Pomorskie
Odp: Bezpieczna kopia?
« Odpowiedź #12 dnia: Kwietnia 25, 2016, 20:21:09 pm »
A co powiecie na to poniżej? Jak to Michał stwierdził "nudziło Ci się nieźle" :)
Docelowo ten skrypt będzie podzielony na dwa pliki - dane do konfiguracji w jednym a reszta w drugim. Przyda się przy poprawkach - żeby za każdym razem nie uzupełniać zmiennych.
Skrypt jest zrobiony w celu stworzenia zadania w harmonogramie zadań. Ale jest też (prawie na ukończeniu) graficzny interfejs dla użytkowników do robienia kopii na USB lub innej lokalizacji. Jednak tutaj będę musiał dorobić jakiś mały programik, który będzie pracował jako usługa (z uprawnieniami SYSTEM lub Administrator) z ikonką przy zegarku po której kliknięciu odpali się GUI (żeby użytkownik jako użytkownik nie miał dostępu do skryptów w których są hasła a także katalogu z bazą). Poniższy skrypt nie zawiera jeszcze pełnej integracji z GUI (nie ma wyświetlania informacji o tym co się aktualanie dzieje)

Całość napisana w VBS, dodatkowo GUI w JS (jQuery) i HTML


Tak wygląda GUI do skryptu:


Skrypt (jeszcze nie przetestowany!!!!):

Cytat: script.vbs
'                 ***************************************************
'                 *   Skrypt do archiwizacji bazy danych Firebird   *
'                 *               v1.01 (2016-04-25)                *
'                 ***************************************************
'
'Wykonywana komenda: gbak.exe -v -b -ig -user Uzytkownik -password Haslo Baza.fdb kopia.bak -Y log.txt
'Za pomocą programu gbak.exe tworzona jest archiwizacja oraz log do katalogu określonego w zmiennej
'uTmpDir. Te pliki są kompresowane i szyfrowane przy użyciu programu 7za.exe a następnie usuwane.
'W katalogu uTmpDir pozostaje zaszyfrowana kopia, która następnie jest kopiowana do lokalizaji
'określonej w argumencie /dest
'
'Zmianę argumentów polecenia gbak.exe należy wykonać w zmiennej sCommand 
'
'----------------------------------------------------------------------------------------------------------
'Uruchamianie z argumentami: script.vbs /arg1:wartosc /arg2:wartosc
'
'Argumenty:
' /dest   ścieżka docelowa dla wykonanej kopii (/dest:d:\backup lub /dest:"d\kopia bezpieczenstwa")
'         Brak argumentu lub nieprawidłowa ścieżka spowoduje stworzenie archiwizacji tylko w roboczym
'         folderze uTmpDir.
' /del    usuwanie WSZYSTKICH PLIKÓW Z ROZSZERZENIAMI ZDEFINIOWANYMI W ZMIENNYCH sExtB, sExtZ i sExtL
'         z lokalizacji określonej w argumencie /dest, starsze niż liczba dni podana jako wartość argumentu.
'         Domyślnie te rozszerzenia to .bak, .7z i .txt
'         Przy usuwaniu brana jest pod uwagę data ostatniej modyfikacji pliku.
'         Brak argumentu - żadne pliki nie są usuwane. Dla celów bezpieczeństwa, jeśli wartość argumentu
'         wynosi mniej niż 7 skrypt zmienia tą wartość na 7.
'         (/del:14) powoduje usunięcie plików starszych niż 14 dni (pod uwagę brana jest data modyfikacji pliku)
' /deltmp parametr stosowany identycznie jak /del z tą różnicą, że usuwane są pliki z folderu uTmpDir
'         UWAGA: użycie opcji [Usuń kopie starsze niż XX dni] w GUI powoduje zastosowanie jedynie argumentu /del.
'                Ta opcja w GUI nie usuwa plików z katalogu uTmpDir.
' /p      przedrostek do nazwy pliku kopii bezpieczenstwa (/p:a)
' /pass   określa które hasło ma być użyte: (/pass:2) kopia jest szyfrowana przy użyciu uPassBak2, brak
'         argumentu lub błędny powoduje, że kopie są szyfrowane przy użyciu uPassBak1
' /hta    argument używany tylko gdy skrypt jest wywoływany przez GUI (/hta:xxxxxxx). Wyświetlane są wtedy
'         w oknie wywołującym skrypt odpowienie informacje o aktualnie wykonywanej czynności. Wartość
'         generowana jest w skrypcie GUI.
' /info   gdy skrypt uruchamiany jest bez GUI przy starcie i zakończeniu może wyświetlić odpowiednie komunikaty.
'         W tym celu należy użyć tego argumentu (/info:yes)
' /email  wysyłanie wiadomości email w przypadku wystąpienia błędów (/email:yes)
'----------------------------------------------------------------------------------------------------------
'Poniższe zmienne należy zdefiniować według swoich potrzeb
'----------------------------------------------------------------------------------------------------------
'nazwa kopii bezpieczeństwa: p_uFileName_strDate
'p         - przedrostek podany w argumencie /p
'uFileName - poniższa zmienna
'strDate   - data i godzina utowrzenia kopii


uFileName = "backup"
uTmpDir   = "C:\KS\BACKUP\"                                        'sciezka do katalogu roboczego zakonczona slashem
uDb       = "C:\KS\BAZA\KSPPS.FDB"                                 'sciezka do pliku kspps.fdb
u7zaDir   = "C:\KS\BACKUP\"                                        'lokalizacja programu 7za.exe
uPassBak1 = "haslo1"                                               'czytaj argument /pass
uPassBak2 = "haslo2"                                               'czytaj argument /pass
uDbUser   = "sysdba"                                               'uzytkownik bazy firebird
uDbPass   = "masterkey"                                            'haslo do bazy firebird
uGbak     = "C:\Program Files\Firebird\Firebird_2_5\bin\gbak.exe"  'sciezka do programu gbak
'----------------------------------------------------------------------------------------------------------
'Poniższe zmienne dotyczą ustawienia konta pocztowego (wiadomości o błędach)
'----------------------------------------------------------------------------------------------------------

uMailFrom       = "adres@mail.pl"
uMailTo         = "adres@mail.pl"
uMailSubject    = "Temat maila"
uMailSMTP       = "smtp.serwer.pl"
uMailPort       = 465
uMailSendUsing  = 2
uMailSMTPAuth   = 1
uMailSMTPUseSSL = true
uMailUserName   = "uzytkownik"
uMailPassword   = "haslo"
'----------------------------------------------------------------------------------------------------------
On Error Resume Next
Dim ErrDesc
 
'odczyt argumentów
Set vArguments = WScript.Arguments.Named
aHTA    = vArguments.Item("hta")
aPref   = vArguments.Item("p")
aPass   = vArguments.Item("pass")
aDest   = vArguments.Item("dest")
aDel    = vArguments.Item("del")
aDelTmp = vArguments.Item("deltmp")
aInfo   = vArguments.Item("info")
aEmail  = vArguments.Item("email")

'jeśli występuje /del lub /deltmp i wartość jest mniejsza od 7 ustaw 7
If IsNumeric(aDel) Then
   If IsEmpty(aDel) Then
      aDel=Null
   Else
      If CInt(aDel) < 7 Then aDel = 7
   End If
End If

If IsNumeric(aDelTmp) Then
   If IsEmpty(aDelTmp) Then
      aDelTmp=Null
   Else
      If CInt(aDelTmp) < 7 Then aDelTmp = 7
   End If
End If

'jesli argument /pass ma wartosc 2 to haslo2, w innym przypadku haslo1
If aPass = 2 Then
   aPass = uPassBak2
Else
   aPass = uPassBak1
End If

'odczyt daty i godziny
sYear = Year(Now())
sMonth = Month(Now())
   If Len(sMonth) = 1 Then sMonth = "0" & Month(Now())
sDay = Day(Now())
   If Len(sDay) = 1 Then sDay = "0" & Day(Now())
sHour = Hour(Now())
  If Len(sHour) = 1 Then sHour = "0" & Hour(Now())
sMin = Minute(Now())
  If Len(sMin) = 1 Then sMin = "0" & Minute(Now())
sSec = Second(Now())
  If Len(sSec) = 1 Then sSec = "0" & Second(Now())
 
sDate = sYear & sMonth & sDay & "T" & sHour & sMin & sSec
sExtB = ".bak"
sExtZ = ".7z"
sExtL = ".txt"

'nazwa pliku kopii z przedrostkiem i datą
uFileName = aPref & uFileName & sDate

'komenda do wykonania kopii
sCommand=chr(34) & uGbak & chr(34) & " -v -b -ig -user " & uDbUser & " -password " & uDbPass & " " & uDb & " " & uTmpDir & uFileName & sExtB & " -Y " &  uTmpDir & uFileName & sExtL
'komenda do kompresowania i szyfrowania
sCommand7z=chr(34) & u7zaDir & "7za.exe" & chr(34) & " a -mx -mhe -P" & aPass & " " & uTmpDir & uFileName & sExtZ & " " & uTmpDir & uFileName & "*.*"
'komenda do weryfikowania archiwum
sCommand7zV=chr(34) & u7zaDir & "7za.exe" & chr(34) & " t -P" & aPass & " " & uTmpDir & uFileName & sExtZ

'GUI (jesli jest parametr)
If Not IsEmpty(aHTA) Then
   Dim IE
   For Each IE In CreateObject("Shell.Application").windows
      If IsObject(IE.GetProperty(aHTA)) Then
         set aHTA = IE.GetProperty(aHTA)
         IE.Quit
      End If
   Next   
End If

'If IsObject(aHTA) Then
   'aHTA.infotext.innerHTML = sCommand
'End If

'----------------------------------------------------------------------------------------------------------
'START
'----------------------------------------------------------------------------------------------------------

If aInfo = "yes" Then msgbox "Rozpoczynam tworzenie kopii bezpieczeństwa"

dim oFso
Dim oShell
Set ofso = CreateObject("Scripting.FileSystemObject")
Set oShell = CreateObject("WScript.Shell")


If (oFso.FolderExists(uTmpDir) = False) Then
   ErrDesc = ErrDesc & "  Błędna konfiguracja skryptu (katalog roboczy)" & vbCrLf
   fError true
End If
If (oFso.FileExists(uDb) = False) Then
   ErrDesc = ErrDesc &  "  Błędna konfiguracja skryptu (ścieżka do bazy danych)"  & vbCrLf
   fError true
End If
If (oFso.FileExists(u7zaDir&"7za.exe") = False) Then
   ErrDesc = ErrDesc & "  Błędna konfiguracja skryptu (ścieżka do programu 7za.exe)" & vbCrLf
   fError true
End If
If (oFso.FileExists(uGbak) = False) Then
   ErrDesc = ErrDesc & "  Błędna konfiguracja skryptu (ścieżka do programu gbak.exe)" & vbCrLf
   fError true
End If

'Plik Log
Set logFile = oFso.OpenTextFile (uTmpDir & "_" & aPref & "log.txt", 8, True)
logFile.WriteLine Now()

'Usuwanie plików z takimi samymi nazwami jeśli istnieją

For Each oFile in oFso.GetFolder(uTmpDir).Files
   If instr(oFile.Name, uFileName)=1 Then
      oFso.DeleteFile oFile.Path, True
   End If
Next

'Usuwanie plików starszych niz /deltmp
If IsNumeric(aDelTmp) Then
   info="Nie usunięto żadnego pliku w katalogu " & uTmpDir
   ii=0
   For Each oFile in oFso.GetFolder(uTmpDir).Files
      If DateDiff("d", oFile.DateLastModified, Now()) > CInt(aDelTmp) Then
         If instr(oFile.Name, sExtZ)=(Len(oFile.Name)-Len(sExtZ)+1) OR instr(oFile.Name, sExtB)=(Len(oFile.Name)-Len(sExtB)+1) OR instr(oFile.Name, sExtL)=(Len(oFile.Name)-Len(sExtL)+1)  Then
            ii=ii+1
            oFso.DeleteFile oFile.Path, True
         End If
      End If
   Next
   If ii>0 Then info="W katalogu " & uTmpDir & " usunięto starych plików: " & ii
   logFile.WriteLine "  " & info
End If

'Tworzenie kopii bezpieczeństwa
logFile.WriteLine "  Tworzenie kopii bezpieczeństwa..."
ret = oShell.Run ("cmd /c " & sCommand, 0, True)
logFile.WriteLine "  Utworzono plik " & uFileName&sExtB
If ret > 0 Then ErrDesc = ErrDesc & "  Błąd podczas tworenia kopii bezpieczenstwa (gbak). Należy sprawdzić logi." & vbCrLf

'Kompresowanie i szyfrowanie kopii
ret = oShell.Run ("cmd /c " & sCommand7z & " >" & uTmpDir & "log7z.tmp", 0, True)
Set ftmp = oFso.OpenTextFile(uTmpDir & "log7z.tmp", 1)
   tmpwrite=""
   Do Until ftmp.AtEndOfStream
      tmpline = ftmp.ReadLine
      If (Len(tmpline) > 0) AND (instr(tmpline,"7-Zip")<>1) AND (instr(tmpline,"Scanning")<>1) Then tmpwrite = tmpwrite & "  " & tmpline & vbCrLf
    Loop
   logFile.Write tmpwrite
ftmp.Close
If ret > 0 Then ErrDesc = ErrDesc & tmpwrite & vbCrLf

'Weryfikowanie archiwum
ret = oShell.Run ("cmd /c " & sCommand7zV & " >" & uTmpDir & "log7z.tmp", 0, True)
Set ftmp = oFso.OpenTextFile(uTmpDir & "log7z.tmp", 1)
   tmpwrite=""
   Do Until ftmp.AtEndOfStream
      tmpline = ftmp.ReadLine
      If (Len(tmpline) > 0) AND (instr(tmpline,"7-Zip")<>1) AND (instr(tmpline,"Scanning")<>1) Then tmpwrite = tmpwrite & "  " & tmpline & vbCrLf
    Loop
   logFile.Write tmpwrite
ftmp.Close
If (instr(tmpwrite, "No files to process")) OR (instr(tmpwrite, "Files: 0")) OR (instr(tmpwrite, "Size:       0")) Then ErrDesc = ErrDesc & tmpwrite & vbCrLf
If ret > 0 Then ErrDesc = ErrDesc & tmpwrite & vbCrLf


'Usuwanie plików tymczasowych
If (oFso.FileExists(uTmpDir&"log7z.tmp")) Then oFso.DeleteFile uTmpDir&"log7z.tmp", True
If (oFso.FileExists(uTmpDir&uFileName&sExtB)) Then oFso.DeleteFile uTmpDir&uFileName&sExtB, True
If (oFso.FileExists(uTmpDir&uFileName&sExtL)) Then oFso.DeleteFile uTmpDir&uFileName&sExtL, True

'Kopiowanie archiwizacji do /dest ewentualne usuwanie plików starszych niz /del
If (oFso.FolderExists(aDest)) Then
   If IsNumeric(aDel) Then
      info="Nie usunięto żadnego pliku w katalogu " & aDest
      ii=0
      For Each oFile in oFso.GetFolder(aDest).Files
         If DateDiff("d", oFile.DateLastModified, Now()) > CInt(aDel) Then
            If instr(oFile.Name, sExtZ)=(Len(oFile.Name)-Len(sExtZ)+1) OR instr(oFile.Name, sExtB)=(Len(oFile.Name)-Len(sExtB)+1) OR instr(oFile.Name, sExtL)=(Len(oFile.Name)-Len(sExtL)+1)  Then
               ii=ii+1
               oFso.DeleteFile oFile.Path, True
            End If
         End If
      Next
      If ii>0 Then info="W katalogu " & aDest & " usunięto starych plików: " & ii
      logFile.WriteLine "  " & info
   End If
   oFso.CopyFile uTmpDir&uFileName&sExtZ, aDest
   logFile.WriteLine "  Skopiowano archiwizacje do " & aDest
Else
   logFile.WriteLine "  BLAD: nie skopiowano archiwizacji z powodu blednej sciezki docelowej: " & aDest
   ErrDesc = ErrDesc & "  Nie skopiowano archiwizacji z powodu blednej sciezki docelowej: " & aDest & vbCrLf
End If

logFile.WriteLine "  Koniec: " & Now()
logFile.Close


If (Err.Number <> 0) OR Len(ErrDesc) > 0 Then
   If Err.Number <> 0 Then
      ErrDesc =  ErrDesc & "  Err: " & Err.Number & " Source: " & Err.Source & " Description: " &  Err.Description & vbCrLf
      Err.Clear
   End If
   fError false
End If

If aInfo = "yes" Then msgbox "Zakończono tworzenie kopii bezpieczeństwa."
'----------------------------------------------------------------------------------------------------
'obsługa błędów

Function fError (qu)
   if IsObject(logFile) Then logFile.Close
   Set errFile = oFso.OpenTextFile ("err.txt", 8, True)
   errFile.WriteLine Now()
   errFile.Write ErrDesc
   errFile.Close
   If aInfo = "yes" Then msgbox "Wystąpiły błędy. Należy sprwdzić plik err.txt"
   If (aEmail="yes") Then SendEmail
   If (qu=true) Then WScript.Quit
End Function
'-----------------------------------------------------------------------------------------------------
'wysyłanie maila

Function SendEmail
   Set oMail = CreateObject("CDO.Message")
   oMail.From     = uMailFrom
   oMail.To       = uMailTo
   oMail.Subject  = uMailSubject
   oMail.TextBody = ErrDesc
   Set mCfg = oMail.Configuration
   mCfg.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = uMailSMTP
   mCfg.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = uMailPort
   mCfg.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing")    = uMailSendUsing
   mCfg.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = uMailSMTPAuth 
   mCfg.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl")      = uMailSMTPUseSSL
   mCfg.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername")    = uMailUserName
   mCfg.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword")    = uMailPassword
   mCfg.Fields.Update
   oMail.Send
End Function
« Ostatnia zmiana: Kwietnia 25, 2016, 20:37:04 pm wysłana przez mpi »

 

* Szukaj


* Kto jest on-line

  • Kropka Gości: 555
  • Kropka Ukrytych: 0
  • Kropka Użytkowników: 0

Nie ma żadnego użytkownika on-line.

Reklama

* Aktywni

Paweł Paweł
9407 Wiadomości
mpi
3356 Wiadomości
PiotrSz
3285 Wiadomości
Michał Michał
3191 Wiadomości
karolweksler
3150 Wiadomości
09061303
3079 Wiadomości
Edward_B Edward_B
2968 Wiadomości
Bartosz Bartosz
2375 Wiadomości
maciek777 maciek777
2201 Wiadomości
cilazapril cilazapril
1634 Wiadomości

Reklama

Reklama

Style:3: index (domyslny), Portal (default), Display (default).
Pod-szablony:8: init, html_above, body_above, portal_above, main, portal_below, body_below, html_below.
Pliki językowe:8: SPortal.english (domyslny), SPortal.polish-utf8 (domyslny), SPortal.english (domyslny), index+Modifications.english (domyslny), index+Modifications.polish-utf8 (domyslny), SPortal.polish-utf8 (domyslny), index.english (domyslny), index.polish-utf8 (domyslny).
Arkusze stylów:1: portal (default).
Uwzględnione pliki:15 - 738KB. (pokaż)
Użytych zapytań: 29.

[Pokaż zapytania]