當下班時, 我希望電腦自動把重要資料壓縮備份起來, 該怎麼做呢?
想做這件事, 只要寫一個簡單的 Script 向 schtasks.exe 預約工作即可.
任何可以在 Windows 上執行的 Script 語言都可以完成這項工作. 例如: bat 檔. 當然你也可以用 Python 完成這項工作.
不過, 今天我想介紹 PowerShell script 的作法.
本文重點:
1. 如何預約工作?
2. 如何修改 Path 搜尋路徑, 讓程式可以被搜尋?
3. 如何啟動特定的程式?
4. 如何在批次檔 (bat 檔) 呼叫 PowerShell ps1 檔?
5. 完整範例程式下載
如果一次看程式碼, 我保證會很痛苦, 所以有些事情要先交代一下.
1. 如何預約工作?
只用使用 schtasks /create 就可以向 Windows 預約一個工作. 這種東西叫做 schedule (排程).
語法:
schtasks /create /sc ONCE /st 啟動時間/tn 工作名稱 /tr "執行工作指令"
範例:
預約下午 2:23 分, 自動開啟 notepad 程式的作法
schtasks /create /sc ONCE /st 14:23:00 /tn "Task" /tr "notepad.exe"
你可以直接在 cmd.exe 命令列執行看看, 他真的會動!!
更多的排程選項:
http://msdn.microsoft.com/en-us/library/bb736357(VS.85).aspx
2. 如何取得命令列的參數 (PowerShell)?
範例:
param ([switch] $schedule)
呼叫方式:
ps c:\>00_backup.ps1 -schedule
3. 如何讓程式 pause 顯示處理結果 (PowerShell)?
請參考: http://blogs.msdn.com/powershell/archive/2007/02/25/pause.aspx
4. 如何啟動特定的程式 (PowerShell)?
語法:
$cmd = "& '執行檔.exe' " # 一定要有 &
Invoke-Expression $cmd
範例:
# 呼叫 7z.exe 把 c:\test 目錄, 壓成 test.7z
$cmd = "& 'C:\Program Files\7-Zip\7z.exe' a -t7z -mx=3
c:\test.7z c:\test\"
Invoke-Expression $cmd
5. 如何修改 Path 搜尋路徑, 讓程式可以搜尋的到 (PowerShell) ?
PowerShell 範例:
#暫時加到 PATH (只有目前 cmdlet 有效)
$env:path +=";C:\Program Files\7-Zip\"
Dos 的作法:
:: 暫時加到 PATH (只有目前 cmd.exe 有效)
set PATH=%PATH%;C:\Program Files\7-Zip\
固定寫入系統 PATH, 反應所有的程式:
SetEnv -a PATH %%"C:\Program Files\7-Zip
(SetEnv.exe 請到下面網址下載)
http://www.codeproject.com/KB/applications/SetEnv.aspx
6. 如何切換執行路徑 (PowerShell)
pushd (split-path -parent $myinvocation.mycommand.definition)
恢復目前路徑: popd
7. 如何在批次檔 (bat 檔)呼叫 PowerShell ps1 檔?
這樣我們就可以用滑鼠直接在 bat 檔上 Double-Clicked, 立刻執行我們的 PowerShell 而不動任何鍵盤.
語法:
powershell -command "& 'PowerShell ps1 程式檔' -參數"
範例:
# 呼叫 00_backup.ps1 -schedule 的作法
powershell -command "& './00_backup.ps1' -schedule "
完整範例程式下載
重要程式碼片段: 00_backup.ps1 完整範例: schedulebackup.zip
程式使用方式:
Step 1: 下載 schedulebackkup.zip
Step 2: 滑鼠 Double-Clicked
00_backup_dos_lunch.bat
Step 3: Enjoy!
程式行為:
1 分鐘後, 程式會自動將目前目錄下的 test1 test2 目錄進行壓縮.
補充資料:
foreach 指令範例:
------------------------------------ code --------------------------------------
$source_collection="docs", "Work2", "00_svn_root", "test", "Work",
"重要傳送檔"
foreach($i in $source_collection){
$cmd = "& '7z.exe' a -t7z -mx=3 "+
$BackupToWhichDirectory+$i+".7z" +" "+$i+"\"
write-host $cmd
Invoke-Expression $cmd
}
------------------------------------------------------------------------------------
Enjoy by Jing.
參考資料:
[1] Powershell script that can schedule itself to run later
http://blogs.msdn.com/mwilbur/archive/2007/02/23/powershell-script-that-can-schedule-itself-to-run-later.aspx
[2] 允許在 Dos 啟動 powershell 指令
http://www.searchmarked.com/windows/how-to-schedule-a-windows-powershell-script.php
不好意思
回覆刪除那個code似乎下載不下來
不知道你那邊還有沒有
因為我最近在學習
用powershell建立windows task
所以需要一些參考範例
如果可以
可以請您寄到
whocares19880516@gmail.com
這個信箱嗎
謝謝!!
不好意思
回覆刪除那個code似乎下載不下來
不知道你那邊還有沒有
因為我最近在學習
用powershell建立windows task
所以需要一些參考範例
如果可以
可以請您寄到
whocares19880516@gmail.com
這個信箱嗎
謝謝!!
Hi friend,
回覆刪除Please check the following link, https://github.com/jing-tw/lab-ps-schedule.
Enjoy!
Jing.