Scripting on Windows

December 9 2017

Linux နဲ့ပတ်သက်တာတွေပဲရေးဖြစ်တာများတဲ့အတွက် အပြောင်းအလဲလေးဖြစ်အောင် Windows နဲ့ ဖြတ်သန်းခဲ့တဲ့အချိန်တွေတုန်းကအကြောင်းအရာလေးကိုပြန်ပြောပါရစေ။

Unix / Linux မှာတော့ Scripting ဆိုရင် သိပ်ရွေးနေစရာမလိုပါဘူး။ Bash script နဲ့ တော်တော်များများကိုဆောင်ရွက်နိုင်လို့ပါပဲ။ ဒီထက်ပိုလိုအပ်လာမယ်ဆိုရင်လဲ အများအားဖြင့် Python က တပါတည်းပါဝင်ပြီးသားဖြစ်လေ့ရှိတာကြောင့်လွယ်လယ်ကူကူအသုံးပြုနိုင်ပါတယ်။ Windows မှာကျ Batch script ဆိုတာရှိပေမဲ့ တကယ်တမ်းကျ ဘာမှမယ်မယ်ရရ သုံးလို့မရပါဘူး။ ဒါကြောင့် အများအားဖြင့် VBScript ကိုအသုံးပြုရပါတယ်။ VBScript က Windows ရဲ့ လုပ်ဆောင်ချက်တော်တော်များများကို ထိန်းချုပ်လို့ရတဲ့အတွက် အရမ်းကိုသုံးဝင်တဲ့ Scripting language တစ်ခုပါပဲ။ ဘယ်လောက်ထိအောင် အသုံးဝင်ခဲ့လဲဆိုရင် Windows XP ခေတ်မှာ USB Flash Drive တွေကနေကူးတဲ့ Virus တော်တော်များများက VBScript နဲ့ရေးထားတာတွေကို ကြုံခဲ့ရဖူးပါတယ်။ အဲဒီအချိန်တုန်းကတော့ VBScript နဲ့ရေးထားတဲ့ Virus တွေ့ရင်ကို အရမ်းပျော်ခဲ့မိတယ်။ ဘာလို့လဲဆိုတော့ Script တို့ရဲ့ထံုးစံအတိုင်း Binary အနေနဲ့ရှိနေတာမဟုတ်တဲ့အတွက် ရေးထားတဲ့ Coding ကို Text Editor နဲ့ဖွင့်ပြီး လွယ်လွယ်ကူကူလေ့လာလို့ရတာကြောင့်ပါပဲ။ တကူးတကကိုလိုက်စုတယ်။ သူ့ရဲ့ Behavior ကိုကြည့်ပြီး Removal Tool လေးတွေပြန်ရေးတယ်။ များသောအားဖြင့်က Script ကို System32 လိုနေရာမျိုးထဲကူးထည့်ပြီး Windows တက်လာတာနဲ့ အဲ့ဒီ Script ကို Run အောင် Registory ထဲဝင်ရေးထားလေ့ရှိတယ်။ ပြီးရင်တော့ စက်မှာတပ်လိုက်တဲ့ USB Drive တိုင်းရဲ့အထဲကို copy ကူးထည့်တယ်။ Drive ထဲရှိတဲ့ Data တွေကို ဝှက်ပစ်တယ်။ နောက် အခြားစက်မှာသွားတပ်လိုက်တာနဲ့ Drive ထဲကူးထည့်ထားတဲ့ Script ကို အလိုအလျောက် Run အောင် Autorun.inf ဆိုတဲ့ဖိုင်နဲ့ချိတ်ထားလေ့ရှိတယ်။ အမှန်ကတော့ VBScript အစွမ်းကြောင့်ဆိုတာထက် အဲ့ဒီ Autorun.inf ကြောင့်ပဲ Windows XP တွေမှာ ဒုက္ခရောက်ရတာလို့တောင်ပြောရမလိုပါ။ Autorun.inf ဆိုတာ CD/DVD တွေကို စက်ထဲထည့်လိုက်တာနဲ့ အခွေထဲပါတဲ့ Program ကို အလိုအလျောက် Run အောင်လုပ်ပေးတဲ့ File လေးပါ။ Windows ရဲ့ Feature တစ်ခုပါ။ အဲဒါကိုပဲအသုံးချပြီး USB Drive ထဲက Virus ကို run အောင်လုပ်ကြတာပါ။ အခုကတော့ Autorun တွေပိတ်ထားတာ၊ UAC (User Account Control) စတာတွေနဲ့ ထိန်းထားတာဖြစ်တဲ့အတွက် Windows XP တုန်းကလောက် မလွယ်ကူတော့ပါဘူး။ မူရင်းအကြောင်းအရာကိုပြန်သွားရမယ်ဆိုရင် VBScript နဲ့က တော်တော်လေးကိုအလုပ်ဖြစ်ပါတယ်။ ဒါပေမဲ့ အဲဒီအချိန်တွေတုန်းက အင်တာနက်ဆိုတာ သိပ်မတွင်ကျယ်သေးတာ့ VBScript ကိုလေ့လာဖို့အတွက်ကို Documentation ဖိုင်လေးပဲ အားကိုးရတာပါ။ Coding ကိုအစအဆုံး ကိုယ်တိုင်ရေးနိုင်တာထက် သူများရေးထားတာကို ကောင်းကောင်းဖတ်နိုင်ပြင်နိုင်တာလောက်ထိပဲခရီးရောက်လိုက်ပါတယ်။ ဘာလို့လဲဆိုတော့ VBScript ထက် လေ့လာရပိုလွယ်ပြီး ရေးရတာလည်း ပိုလွယ်တဲ့ AutoIt ကိုတွေ့ခဲ့တာကြောင့်ပါ။

AutoIt က VBScript လိုပါပဲ။ ရေးရတဲ့ Syntax က BASIC နဲ့တူပါတယ်။ သူရဲ့အားသာချက်ကတော့ ရိုးရှင်းပြီးလေ့လာရလွယ်ကူတဲ့ Documentation ပါ။ တန်းပြီး run ကြည့်လို့ရတဲ့ Coding နမူနာလေးတွေပါတဲ့အတွက် အလုပ်လုပ်ပုံကို ပိုမိုနားလည်ရလွယ်ကူစေပါတယ်။ နောက်ပြီး VBScript နဲ့တော်တော်ခက်ခက်ခဲခဲရေးရမယ့်ဟာမျိုးတွေကို သူ့မှာ ၂ကြောင်း၃ကြောင်းလောက်ရေးရုံနဲ့အဆင်ပြေသွားအောင် ကြိုရေးပေးထားတဲ့ Library တွေစုံစုံလင်လင်ပါဝင်ပါတယ်။ သဘောအကျဆုံးအချက်ကတော့ Compile လုပ်ပြီး Binary(exe) အနေနဲ့ထုတ်လို့ရတာပါ။ VBScript ဆိုရင် Scripting Language တွေရဲ့သဘာဝအတိုင်း Text File တစ်ခုအနေနဲ့ရှိတာဖြစ်တဲ့အတွက် Coding ကိုမြင်နိုင်ပါတယ်။ AutoIt မှာကတော့ Script အနေနဲ့ Interpreter ကနေတဆင့် Run လို့ရသလို AutoIt interpreter သွင်းထားစရာမလိုပဲ Compile လုပ်လို့ထွက်လာတဲ့ exe ဖိုင်လေးကို ကြိုက်တဲ့စက်မှာ တန်း Run လို့ရပါတယ်။ Coding ရေးသားမှုအပိုင်းမှာကျတော့လည်း သီးသန့် Text Editor တစ်ခါတည်းပါလာပြီးသားပါ။ Text Editor ဆိုပေမဲ့ IDE တစ်ခုလို Syntax Hilighting တွေ၊ Test Run လုပ်ကြည့်တာ၊ Build/Compile လုပ်တာတွေပါဝင်ပါတယ်။ AutoIt နဲ့ဘာတွေလုပ်ခဲ့ဖူးသလဲဆိုရင် အဓိကကတော့ Windows မှာသုံးများတဲ့ Software တွေရဲ့ Installation Setup တွေမှာ Next Next Ok စသဖြင့်မနှိပ်ချင်တဲ့အတွက် Automate လုပ်တာတွေများတယ်။ Windows တင်ပြီးတာနဲ့ လိုအပ်တဲ့ Software တွေကို အလိုအလျောက်သွင်းသွားအောင်လုပ်တာမျိုးပါ။ နောက်ပြီး သူငယ်ချင်းတွေကိုစဖို့ အတွက် program လေးတွေလုပ်ဖြစ်တယ်။ မှတ်မှတ်ရရဆိုရင် One Missed Call ဆိုတဲ့သရဲကားထဲက တီးလုံးသံတွေကို timer ပေးပြီး ဖွင့်ခိုင်းတာမျိုးတွေ၊ နောက်ပြီး အဲဒီအချိန်က အင်တာနက်ဆိုင်တွေမှာ Key Logger တွေကိုကြောက်ရတဲ့အတွက် Gtalk ကိုဖွင့်လိုက်တာနဲ့ Login ဝင်ဖို့ကို username တလှည့် password တလှည့်ရိုက်ပြီး keystroke တွေရောသွားအောင်လုပ်ပေးတဲ့ဟာမျိုးလေးတွေ စသဖြင့် စိတ်ကူးတည့်ရာလေးတွေတော်တော်လုပ်ဖြစ်တယ်။ ပြောရရင် AutoIt က Windows ပေါ်မှာ အရမ်းကိုမွှေလို့ကောင်းတဲ့ Language လေးပါ။

AutoIt အကြောင်းပြန်ပြောဖြစ်တာကတော့ အလုပ်မှာ လက်တလော ပြန်သုံးလိုက်ရလို့ပါပဲ။ Windows စက်တွေထဲက Data ကို Linux Server ပေါ် Backup အနေနဲ့ Upload လုပ်တာရယ်၊ Upload လုပ်ပြီးသား Data တွေကို Windows စက်ပေါ်မှာ အချိန်အတိုင်းအတာတစ်ခုထိထားထားပြီးမှရှင်းလင်းရေးလုပ်ချင်တာရယ်ပါ။ Linux Server ပေါ်တင်မှာဖြစ်တဲ့အတွက် Server Side ကတော့ ပြဿနာမရှိပါဘူး။ SSH ကနေတဆင့် လှမ်းပို့ရင်ရပါတယ်။ Windows ဘက်မှာကျတော့ အရေးကြီးတဲ့ စက်ဖြစ်တဲ့အတွက် Software တွေ Install လုပ်လို့ မလိုအပ်ပဲ ရှုပ်ထွေးကုန်မှာကိုမဖြစ်စေချင်တာပါ။ Windows ပေါ်မှာ အတတ်နိုင်ဆုံး Standalone run နိုင်ဖို့လိုအပ်ပါတယ်။ ဒါကြောင့် ပထမဦးဆုံးကြိုးစားကြည့်တာကတော့ Batch Script နဲ့ပါ။ Batch ချည်းသီးသန့်တော့မဟုတ်ပါဘူး။ SSH ကနေတဆင့် Data transfer လုပ်ဖို့အတွက် PuTTY ထဲမှာပါတဲ့ pscp Console Application လေးကိုသုံးတာပါ။ နောက်တစ်ခုက Data ကိုပို့တဲ့အခါ ဖိုင်တစ်ဖိုင်ချင်းကို connection တစ်ခုစီဖွင့်ပြီးပို့တာထက် အကုန်လုံးကိုစုပြီး compressed archive တစ်ခုလုပ်ပို့တာက Windows ဘက်မှာ Overhead နည်းစေပါတယ်။ ဒါကြောင့် Compress လုပ်ဖို့ 7Zip ရဲ့ 7za ဆိုတဲ့ Console Application လေးနဲ့ထပ်တွဲသုံးလိုက်ပါတယ်။ pscp နဲ့ Linux Server ထဲကူးထည့်လိုက်တဲ့ဖိုင်ရဲ့ Integrity ကိုစစ်ဖို့ကိုတော့ plink ကနေတဆင့် md5sum ထုတ်ခိုင်းပြီးပြန်တိုက်စစ်ပါတယ်။ အားလုံးအဆင်ပြေပေမဲ့ Scheduler နဲ့ အချိန်သတ်မှတ်ပြီး Batch script ကို Run ခိုင်းတဲ့အခါကျ CMD Prompt တစ်ချက်ပေါ်ပြီးပြန်ပိတ်ပါတယ်။ ပုံမှန်ဆိုရင်တော့ ပြဿနာမရှိပေမဲ့ အဲဒီ Windows ပေါ်မှာ Run ထားတဲ့ အဓိက Software ကို interrupt ဖြစ်ဖြစ်သွားစေတဲ့အတွက် အဆင်မပြေပါဘူး။ နောက်ပြီး Backup သိမ်းမယ့် Linux Server ဘက်အပိုင်းမှာ Server ပြောင်းထားချင်တာ၊ Backup Directory ကိုပြောင်းချင်တာတို့အတွက်ကျ Batch ထဲမှာဝင်ပြင်တဲ့အခါ လွဲချော်ပြီး Script က အလုပ်မလုပ်တော့တာမျိုးတွေဖြစ်သွားနိုင်ပါတယ်။ ဒါကြောင့် Batch အစား VBScript သုံးဖို့စဉ်းစားကြည့်ပါသေးတယ်။ လုပ်ချင်တာတွေက AutoIt မှာပိုလွယ်တဲ့အတွက်ကြောင့် AutoIt ကိုပဲရွေးဖြစ်သွားပါတယ်။ pscp, plink နဲ့ 7za ကို Script ထဲထည့်သုံးတာကမခက်ပါဘူး။ ပိုသေသပ်ပြီး environment လွယ်လွယ်ကူကူပြောင်းလို့ရအောင် config ဖိုင်သီးသန့်ခွဲထုတ်တဲ့အပိုင်းနဲ့ Backup File ကိုပို့တဲ့နေရာမှာ ည၁၂နာရီကျော်မှ ပြီးခဲ့တဲ့ရက်က File ကိုပို့ဖို့ရယ်၊ Backup လုပ်ပြီးသား ဖိုင်တွေကို Clean up လုပ်ဖို့ ဘယ်နှစ်ရက်ကြာရင် ဖျက်မယ်ဆိုတာရယ်ကို File တွေရဲ့ Modified Date နဲ့တွက်တဲ့အပိုင်းလောက်ပဲ စဉ်းစားရပါတယ်။

ဒီ Script လေးကို BackupIt လို့နာမည်ပေးထားပြီး GitHub မှာတင်ပေးထားပါတယ်။ Configuration ဖိုင်ဖြစ်တဲ့ config.ini ထဲမှာလိုအပ်တဲ့ data လေးတွေဖြည့်ပေးပြီးတာနဲ့ BackupIt.exe ဖိုင်လေးကို Task Scheduler မှာ ထည့်ပြီး run ခိုင်းလိုက်ရုံပါပဲ။ config.ini ထဲဖြည့်ပေးရမယ့် data တွေကတော့ -

[General] => Backup Server ရဲ့ Information ရေးရမယ့် Section ပါ။

user => SSH Login အတွက် အသုံးပြုမယ့် User Name

pass => SSH Login Password (PuTTY ၏ SSH Private Key ဖြစ်တဲ့ .ppk File အသုံးပြုနိုင်ပါတယ်။ Program နှင့် Directory အတူတူထားပေးဖို့လိုအပ်ပါတယ်)

host => Linux Server ရဲ့ IP (သို့) Host Name

port => SSH အသုံးပြုမယ့် Port Number (အလွတ်ထားထားရင် 22 ကိုပဲ သုံးပါတယ်)

time => ချိတ်ဆက်မယ့် Linux Server ကို ping မရရင် ထပ်မံကြိုးစားမယ့်အချိန်ပမာဏ (အလွတ်ထားရင် ချိတ်လို့မရမချင်း ကြိုးစားနေပါလိမ့်မယ်)

wait => တစ်ကြိမ် Ping မရတိုင်း စောင့်မယ့်မိနစ် (အလွတ်ထားရင် 1 မိနစ်ပါ)

General Section ကတော့ Config ထဲမဖြစ်မနေပါရမယ့် အပိုင်းလေးပါ။ Config ဖိုင်ရဲ့ထိပ်ဆုံးမှာ ရေးပေးဖို့တော့လိုပါတယ်။ ပြီးရင်တော့ Backup လုပ်မယ့် File တွေ Directory တွေရဲ့ Information ကို ကိုယ့်စိတ်ကြိုက် Section name ပေးပြီးရေးလို့ရပါတယ်။

[images] => General မဟုတ်တဲ့ တခြား ကြိုက်တဲ့ နာမည်ပေးလို့ရပါတယ်။ Backup Archive ဖိုင် ထုတ်တဲ့နေရာမှာ Section Name ကို ထည့်သွင်းအသုံးပြုမှာပါ။

path => Backup လုပ်မယ့် Directory Path (ညွှန်းထားတဲ့ Directory အောက်မှာရှိတဲ့ Data တွေကို Backup လုပ်မှာပါ)

name => ရွေးယူလိုတဲ့ ဖိုင်နာမည် ( IMAGES*, *.log, etc. အလွတ်ထားရင် File အားလုံး (*) ဖြစ်ပါတယ်)

type အမျိုးအစား (0 = Files & Directories, 1 = Files, 2 = Directories)

dest => Linux Server ဘက်မှာရှိတဲ့ Directory Path

pday => Backup Data စတင်ပါဝင်မည့်ရက် (အလွတ်ထားရင် 1 ပါ။ မနေ့ကရက်ကိုဆိုလိုတာပါ။)

nday => Backup Data နောက်ဆုံးပါဝင်မည့်ရက် (အလွတ်ထားရင် လက်ရှိရက်ကိုပဲဆိုလိုတာပါ။ 0 နဲ့အတူတူပါပဲ။)

pday, nday မပြောထားရင် Program ကို run တဲ့ရက်မတိုင်ခင်တစ်ရက်က Data တွေကို Archive လုပ်သွားမှာပါ။ အထက်မှာရေးထားတဲ့အတိုင်းဆိုရင်တော့ လွန်ခဲ့တဲ့ ၇ရက်ကနေ Program ကို run တဲ့နေ့ရဲ့ ည ၁၂နာရီမတိုင်ခင်က Data တွေကို စုပြီး Archive လုပ်သွားမှာဖြစ်ပါတယ်။

retn => Retention (path မှာညွှန်းထားတဲ့ Directory ထဲမှာရှိတဲ့ Data တွေကို သတ်မှတ်ထားတဲ့ရက်အရေအတွက်လောက်သိမ်းထားပြီး ဒီထက်ဟောင်းတဲ့ Data တွေကိုတော့ ဖျက်မှာပါ။ အလွတ်ထားရင် Data အဟောင်းတွေကိုမဖျက်ပါဘူး။)

rtyp => Retention အရ ဖျက်မယ့် Data အမျိုးအစား (0 = Original Data & Archives, 1 = Original Data Only, 2 = Archives Only. အလွတ်ထားရင် 0 ပါ။)

ovrw => Archive File ကို Overwrite လုပ်/မလုပ် (အလွတ်ထားရင် 1 ပါ။ Overwrite လုပ်ပါလိမ့်မယ်။ 0 ပေးထားရင်တော့ Archive File Name ကို create လုပ်တဲ့ Date/Time နဲ့ တွဲပြီးပေးပါလိမ့်မယ်။)

[General]
user=sshuser01
pass=pass-123
host=192.168.1.1
port=22
time=3

[data]
path=D:\MyData
name=Works
type=2
dest=/home/sshuser01/Backup/Data
retn=3
rtyp=2
ovrw=0

Windows ပေါ်မှာ ဒီ configuraiton အတိုင်းရေးပြီး Program ကို run လိုက်တာနဲ့ D:\MyData ထဲမှာရှိတဲ့ Directory တွေထဲကမှ Work ဆိုတဲ့ Directory ကို 7zip နဲ့ compress လုပ်ပြီး Linux Server ဖြစ်တဲ့ 192.168.1.1 ပေါ်ကို SSH ကနေတဆင့် copy ကူးတင်သွားမှာပါ။ Linux Server ပေါ်မှာသိမ်းမယ့်လမ်းကြောင်းကတော့ '/home/sshuser01/Backup' ဖြစ်ပါတယ်။ ovrw=0 ပေးထားတဲ့အတွက် Program run လိုက်တိုင်း Archive ဖိုင်တွေကို D:\MyData အောက်ထဲမှာ နာမည်ခွဲပြီးသိမ်းပေးသွားမှာပါ။ ဥပမာ - data_20171208173004.7z ဆိုတဲ့နာမည်မျိုးနဲ့သိမ်းသွားမှာဖြစ်ပါတယ်။ Overwrite မဖြစ်တဲ့အတွက် ဖိုင်တွေကအများကြီးဖြစ်လာပါလိမ့်မယ်။ ဒါကိုပြန်ထိန်းချုပ်ဖို့အတွက် retn=3 လို့ပေးထားတာပါ။ 7z ဖိုင်တွေဘယ်လောက်ပဲများများ ၃ရက်ထက်ပိုပြီးသိမ်းမထားပါဘူး။ ၃ရက်ကျော်ကြာတဲ့ဖိုင်တွေကို Program run တဲ့အချိန်မှာ ဖျက်ပစ်သွားမှာဖြစ်ပါတယ်။ ‘General’ section ထဲက time=3 ကတော့ Backup process မလုပ်ခင် Server ကို Ping ကြည့်ပါလိမ့်မယ်။ Ping မရရင် ၁မိနစ်စောင့်ပြီး နောက်တစ်ခါထပ် Ping ကြည့်မှာပါ။ ၃ခါ Ping လို့မှမရရင်တော့ ထပ်ကြိုးစားတော့မှာမဟုတ်ပါဘူး။ အကယ်၍များ ၁မိနစ်မဟုတ်ဘဲ ၅မိနစ်စောင့်ပြီးမှ ထပ် Ping စေချင်ရင်တော့ ‘General’ section အောက်ထဲမှာ wait=5 လို့ထည့်ပေးလိုက်ရုံပါပဲ။

Logic နဲ့ Process Flow ကိုတော့ BackupIt.au3 Script ဖိုင်လေးကိုကြည့်ပြီး လေ့လာနိုင်ပါတယ်။ AutoIt က Basic Programming Knowledge လေးရှိရုံနဲ့ လွယ်လွယ်ကူကူလေ့လာလို့ရတဲ့ Scripting Language လေးတစ်ခုပါ။ Linux ကိုစလေ့လာတဲ့အချိန် Shell Scripting ပိုင်းမှာ အခက်အခဲမရှိတာ AutoIt ရဲ့ကျေးဇူးတွေ တော်တော်လေးပါတယ်လို့တောင်ပြောလို့ရပါတယ်။ အခုနောက်ပိုင်း Windows မှာ PowerShell ထပ်ပါလာပေမဲ့ Syntax ပုံစံအနည်းငယ်ရှုပ်ထွေးတာရယ် command တွေမှာ Option တွေရေးရတာအရမ်းရှည်တာတွေရယ်ကြောင့် အမှန်အတိုင်းပြောရရင် Windows မှာအားသာချက်တစ်ခုတိုးလာတယ်လို့ ခုချိန်ထိမမြင်မိသေးပါဘူး။ Windows ရဲ့ Configuration ကို Script ရေးပြီးလုပ်လို့ရလာလို့သာဝမ်းသာမိတာပဲရှိပါတယ်။ ဒါပေမဲ့ Windows Server ပိုင်းကို အာရုံစိုက်ပြီးလေ့လာမယ့်သူတွေအတွက်ဆိုရင်တော့ PowerShell က မဖြစ်မနေလေ့လာထားသင့်တယ်လို့တော့ပြောချင်ပါတယ်။ Scripting/Programming ရဲ့ သဘောတရားကိုသိထားပြီးသူတစ်ယောက်အနေနဲ့တော့ ဘာ Language ပဲသုံးသုံးအခက်အခဲရှိမှာမဟုတ်ပါဘူး။ သဘောတရားကိုပိုင်နိုင်ဖို့အတွက်ကတော့ စိတ်ကူးတည့်ရာလေးတွေ ရေးစမ်းကြည့်ဖို့လိုပါလိမ့်မယ်။ နောက်တစ်ခုက သူများရေးထားတဲ့ Code တွေကိုကြည့်ပြီး ဘယ်ဟာက ဘာကြောင့်ရေးတယ်ဆိုတာကို နားလည်အောင်ကြိုးစားကြည့်ဖို့အကြံပေးချင်ပါတယ်။ ဒါမှသာ Coding Idea လေးတွေရပြီး ကိုယ်ရေးတဲ့ Code ထဲ ထည့်သွင်းအသုံးချနိုင်မှာဖြစ်ပါတယ်။ ဒါကြောင့် Windows နဲ့ ဖြတ်သန်းခဲ့တဲ့နေ့ရက်တွေကို အမှတ်ရရင်း ရေးထားတဲ့ AutoIt Script လေးကို ဒီ Post လေးနဲ့ မျှဝေလိုက်ရပါတယ်။

GitHub: BackupIt


comments powered by Disqus