čtvrtek 3. ledna 2013

VPN a powershell


Řešil jsem úkol vzdálené zálohy PC které si každý den vytváří databázi nebo ji modifikuje.Stroj má konektivitu na internet ale pouze CDMA modem který  nestíhá ani běžný denní provoz.Z tohoto důvodu může stěhování záloh probíhat jen v noci.
A na tuto nezbytně dlouhou dobu se potřebuji připojit pomocí VPN stáhnout zálohy na server a VPN odpojit ,  aby spojení nevytěžovalo linku v denních hodinách.A toto vše z centrály naší organizace.
Celý proces zálohy je rozdělen do dvou bloků první je lokální záloha a druhý je záloha na vzdálený server

Lokální záloha:
Vzdálené PC každý den zálohuje na flash kde se  udržuje 8 záloh.Zde se v případě nouze mohu  vrátit o 8dní zpět.Tato záloha je myšlena jako ošetření havárie pevného disku.


Záloha na vzdálený server:
Vytváří dvakrát v týdnu jednu zálohu a starou maže(ve výsledku máme v adresáři vždy jednu aktuální zálohu).Soubor má název ZipPraha a je v cestě D:\ZipPraha.
Na našem serveru se v daný čas spustí powershell skript který nejdříve otestuje zda existuje starý adresář zálohy (je zde řeč o předešlé stažené záloze která se umísťuje na server  disk C:).Pokud adresář existuje,bude smazán i se všemi soubory.Tento krok nám zajišťuje že se nám adresáře nehromadí.Tedy nezvyšuje se objem dat které ještě stěhuji dále na podnikové úložiště kde už zálohy držím 20dní zpět.
Poté skript vytvoří  na serveru adresář jehož název je aktuální datum.
Dále si server sáhne na disk D vzdáleného PC a překopíruje celý adresář ZipPraha na svůj disk C: do adresáře jenž vytvořil.Veškeré své počínání(úspěch,neúspěch) zapisuje skript do logu.
Celý proces je ošetřen podmínkou.Pokud je spojení úspěšně navázáno provede se hlavní skript.Pokud spojení není zapíšeme neúspěch do logu.Skript končí tím že ukončíme VPN spojení.

Časový rozvrh vzdálené zálohy
00:10 smaže z c: soubor z předešlého dne
00:20 stáhne zálohu ze vzdáleného PC a uloží na svůj disk c:
00:50 staženou zálohu z c: umístí do podnikového úložiště(zde už držím zálohu po dnech 20dní zpět)

Skript funguje pomocí již vytvořeného spojení které musíme mít nakonfigurované předem.Jednoduše řečeno pomocí palubních prostředků windows si mezi stroji vytvoříte VPN spojení na bázi klient(vzdálené PC) server(server u vás v organizaci) a toto spojení smysluplně pojmenujete.Powershell pak spojení pomocí jména zavolá a předá parametry spojení(jméno,heslo)


################################  Vytvoril:Petr Skrivan #################################### 

#vytoc spojeni na PRAHA,povereni user:Administrator  heslo:tajneheslo
rasdial PRAHA Administrator tajneheslo
#pockej 30 sekund aby bylo spojeni v poradku navazano
Start-Sleep -Seconds 30
#zalozime log ktery nas bude informovat o provedeni a prubehu skriptu
"Zaloha Rohan" > "C:\VPNLog.txt"
#do logu uvedeme daum a cas spusteni skriptu
get-date >> "C:\VPNLog.txt"
#test konektivity na vzdalene PC.  IP tohoto stroje naleznete treba v
#..sit nastaveni>jmeno vpn spojeni>podrobnosti 
$connect = Test-Connection 192.168.0.10 -quiet
#pokud existuje spojeni na vzdalene pc provede se skript v zavorkach
if($connect -like "True")
{
#spojeni je uspesne zapiseme tuto skutecnost do logu
"Spojeni navazano" >> "C:\VPNLog.txt"
#datum si naformatujeme do podoby retezce ktery muze reprezentovat
#..nazev sdresare
$datum = "{0:yyyy_MM_dd}" -f (get-date)
#pokud existuje adresar zaloha
if (Test-Path C:\Zaloha\)
{
#smaze puvodni adresar jinak by cobian stehoval stale vetsi objem dat
# .. -recurse rika smaz vse vcetne podadresaru
del C:\Zaloha\ -Recurse
}
#v zadane ceste si vytvorime adresar jehoz jmeno je dnesni datum
New-Item -ItemType directory -Path C:\Zaloha\$datum
#zkopirujeme zadany adresar do zadaneho umisteni adresa 192.168.0.10
#..to je adresa meho protejsku v mini-siti VPN.Zjistite ji tak
#..ze si rozkliknete sitova spojeni pak VPN a podrobnosti
copy-item "\\192.168.0.10\d$\ZipPraha " -destination
"C:\Zaloha\$datum" -recurse -Force
#info do logu o uspesnem provedeni skriptu
"Zaloha probehla v poradku " >> "C:\VPNLog.txt"
#info o case kdy byla zaloha dokoncena
get-date >> "C:\VPNLog.txt"
#odpojime VPN spojeni ke vzdalene stanici
rasdial /disconnect
}
#vse v zavorkach vyse se provede jen v pripade ze spojeni bylo navazano
#..pokud spojeni neni navazano nastava situace else
else
{
#zapiseme do logu informaci o neuspesnem spojeni
"Selhání spojeni" >> "C:\VPNLog.txt"
#info o case kdy se zaloha nepovedla
get-date >> "C:\VPNLog.txt"
#odpojime VPN spojeni ke vzdalene stanici
rasdial /disconnect
}