ในบทความก่อนหน้านี้
"Backup by ROBOCOPY command" เราได้ทำการ
Backup โดยใช้คำสั่ง Robocopy
ในการ backup
ไฟล์ไปแล้ว
แต่ข้อจำกัดคือไม่สามารถทำเป็น Progress bar ในการแสดงผลสถานะว่ากำลังดำเนินการไปถึงขั้นตอนใหนแล้วได้
บทความนี้จะเพิ่มในส่วนการแสดง
Progress bar ขึ้นมา
โดยจะใช้คำสั่ง Robocopy เหมือนเดิม แต่จะใช้ผ่านตัว PowerShell กัน
มาดูวิธีการกันเลย
ก่อนอื่นให้เปิดตัว
PowerShell ขึ้นมา
โดยกด
Window + R เพื่อเปิด
Run ขึ้นมา
จากนั้นพิมพ์ว่า
Powershell
ให้เลือกเปิด
Window Powershell ISE โดยทำการคลิ๊กขวาแล้วเลือก
Run as Administrator
จะได้หน้าต่าง
Window Powershell ISE แบบนี้
จากนั้นให้ทำการคัดลอก
Code ด้านล่างนี้ไปวางในส่วน
Script pane
**Code ด้านล่างนี้ผมได้แทรกคำอธิบายไว้ด้วยแล้วนะครับ
$Source = "E:\Calibrate_Plan"
#กำหนดตำแหน่งที่จะ Backup file
$Destination = "E:\Backup"
#กำหนดตำแหน่งที่จะเก็บไฟล์ไว้
$robocmd = "robocopy " + $Source + "
" + $Destination + " /mir
/bytes"
#กำหนดคำสั่งในการ Backup โดยใช้ robocopy //ใช้การคัดลอกแบบ /mir
$staging = invoke-expression "$robocmd /l"
#ทำการ run command โดยใช้พารามิเตอร์ /l เพื่อเป็นการทดสอบก่อน
(ยังไม่ได้ backup จริง)
$ttnewfile=$staging -match 'new file'
$ttmodified = $staging -match 'newer'
$totalfile = $ttnewfile + $ttmodified
#เก็บค่าไฟล์ที่ต้อง Backup ทั้งหมดไว้ในตัวแปร $totalfile
$ttBytearray = [System.Collections.ArrayList]@()
foreach ($file in $totalfile)
{
$arrayID =
$ttBytearray.add($file.substring(13,13).trim())
#ทำการตัดเอา Text ในส่วนของขนาดไฟล์มาเก็บไว้ใน $ttBytearray
#ในส่วน arrayID ถ้าไม่ทำอย่างนี้
จะแสดงตัวเลขลำดับ array ออกมาทาง output
}
$totalByte = (($ttBytearray | measure-object -sum).sum)
#ทำการรวมขนาดไฟล์ที่ต้องทำการคัดลอกทั้งหมด
#Start backup file
$robocopyjob = Start-Job -Name robocopy -ScriptBlock
{param ($command) ; Invoke-Expression -Command $command} -ArgumentList
$robocmd
#เริ่มทำการสำรองข้อมูล
โดยสร้างเป็น job ขึ้นมาเพื่อใช้ตรวจสอบสถานะ
while ($robocopyjob.State -eq 'running')
# Loop ตรวจสอบเพื่อแสดงสถานะ
{
$progress = Receive-Job -Job $robocopyjob -Keep
-ErrorAction SilentlyContinue
$totolFileCount = $totalfile.count
if ($progress)
{
$copiedfiles = ($progress | Select-String -SimpleMatch
'new file', 'newer')
if
($copiedfiles) #ตรวจสอบค่า null หรือเปล่า
{
if
($copiedfiles.count -le 0) { $TotalFilesCopied = $copiedfiles.Count }
else
{ $TotalFilesCopied = $copiedfiles.Count - 1 }
$FilesRemaining = ($totalfile.count - $TotalFilesCopied)
$Bytesarray = [System.Collections.ArrayList]@()
foreach ($Newfile in $copiedfiles)
#count finished copy size
{
if($Newfile)
{
$curCopy =
$Bytesarray.add($Newfile.tostring().substring(13, 13).trim())
#เก็บขนาดไฟล์ที่กำลังคัดลอกใส่ไว้ในตัวแปร
$Bytearray
}
}
$TotalCopies = (($Bytesarray | measure-object -sum).sum)
#หาขนาดไฟล์
ที่ได้ทำการคักลอกไปแล้ว
$PercentComplete
= (($TotalCopies/$totalByte) * 100)
#หา % ที่ทำไปได้ปัจจุบัน
Write-Progress -Id 1 -Activity "Backup files, $TotalFilesCopied
of $totolFileCount " -Status
"status" -PercentComplete $PercentComplete
#สร้าง progress bar แสดงสถานะ การสำรองข้อมูลขึ้นมา
}
}
}
Write-Progress -Id 1 -Activity "Copying files from
$Source to $Destination" -Status 'Completed' -Completed
#สร้าง Progress แสดงสถานะว่าทำการคัดลอกข้อมูลเรียบร้อยแล้ว
$results = Receive-Job -Job $robocopyjob
#ดึงผลลัพธ์มาเก็บไว้ใน $result
Remove-Job $robocopyjob
#ปิด job ที่สร้างไว้
$results[5]
$results[-13..-1]
#ดึงข้อมูลมาแสดงทาง output โดยแสดงผล 5 บรรทัดแรก และ 13 บรรทัดสุดท้าย
cmd /c pause | out-null
#คำสั่งหยุดรอ
|
จากนั้นให้ทำการบันทึกไว้
การที่จะรันตัว Script นี้ได้ต้องทำการเปิด
Set-ExecutionPolicy ไว้ก่อนด้วยนะครับ
พารามิเตอร์ตัวนี้
ปกรติ windows จะตั้งเป็น
Restrict หรือปิดการใช้งานไว้
วิธีการเปิดหรือ
Un-restrict ทำได้โดย
พิมพ์คำสั่ง Set-executionpolicy unrestricted แล้วกด Enter
พิมพ์คำสั่ง Set-executionpolicy unrestricted แล้วกด Enter
ตอนนี้ก็สามารถ Run Script ได้แล้ว
หากต้องการปิดเหมือนเดิมก็ใช้คำสั่ง
Set-executionpolicy restricted
ทดลอง Run คำสั่งในการ Backup ใน Window Powershell ISE ก็จะได้ผลดังนี้
หากต้องการปิดเหมือนเดิมก็ใช้คำสั่ง
Set-executionpolicy restricted
ทดลอง Run คำสั่งในการ Backup ใน Window Powershell ISE ก็จะได้ผลดังนี้
และหาก
Run ตัว Powershell
ที่เราได้ทำการสร้างไว้ก็จะได้ผลดังนี้
เก็บไว้เป็นทางเลือกในการแบคอัพ
อีกวิธีหนึ่งละกันครับ
ความคิดเห็น
แสดงความคิดเห็น