2011-04-12 72 views
2

什麼是自我更新(來自SVN)Powershell腳本的最佳方式?Self Updating Powershell腳本

它應該能夠啓動一個新進程,然後在確認當前進程已經結束之後調用SVN update $script; './$script'

if ((svn st -u --quiet $script) -match "\*"){ 
    $scriptToRun = 'SVN update $script; "./$script"' 
    ##start new process that will end this process and execute $scriptToRun 
} 

回答

3

我以爲這會做伎倆,即使有點天真。您有兩個腳本 - StartApp.ps1,它會對更新進行任何必要的檢查。運行後,鏈接MainApp.ps1這是應用程序本身,這是什麼會得到更新。

StartApp.ps1 - 揭開序幕應用程序,但也做了更新檢查:如果

# Bootstrap app 
# 
# Check for updates here 

if(some_check_to_determine_if_update_required) 
{ 
    # Execute whatever external source control commands required but wait until 
    # done: 
    Start-Process -Wait -FilePath "<path_to_svn>" -ArgumentList <args_you_need> 
} 

# Launch the (now possibly updated) app 
.\MainApp.ps1 
1

我不知道有腳本更新自己是個好主意。您可以嘗試從Task Scheduler中執行此操作,或者腳本必須執行此操作,然後將其分成兩部分,第一部分是用戶運行的部分。保持這個小而簡單。第二部分是你更新svn的內容,它應該完成大部分工作。

基本上處理參數和自動更新的小型用戶腳本。第二部分是完成大部分工作並獲得自動化。

+0

我試圖讓它自成一體。我可以創建一個主腳本來調用主腳本,但那時需要手動更新。 – Glennular 2011-04-13 13:53:00

+0

您可能會讓腳本調用「at」調度程序來執行更新。它做一次性調度。鍵入「at /?」在命令提示符處尋求幫助。 – WebWeasel 2011-04-13 16:51:14

0

1)測試,需要進行更新。如果不需要,停止。

2)重命名您正在執行的腳本文件。

3)副本進行更新腳本原來的名稱

4)檢查副本。大小,校驗和等等。你仍然有機會在這裏恢復。

5)執行新腳本並退出運行。

如果您需要管理員權限來覆蓋腳本,則可能需要找出高程。如果你總是以提升的特權運行,那應該不重要。