自我更新(来自SVN)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
}
答案 0 :(得分: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 :(得分:1)
我不确定自己更新脚本是个好主意。您可以尝试从任务计划程序执行此操作,或者如果脚本必须执行此操作,则将其分为两部分,第一部分是用户运行的部分。保持这个小而简单。第二部分是你从svn更新的内容,它应该完成大部分工作。
基本上处理参数和自动更新的小用户脚本。第二部分完成大部分工作并获得自动更新。
答案 2 :(得分:0)
1)测试是否需要更新。如果不需要就停止。
2)重命名执行的脚本文件。
3)将更新的脚本复制到原始名称
4)验证副本。大小,校验和,东西。你还有机会在这里恢复。
5)执行新脚本并退出运行。
如果您需要管理员权限来覆盖脚本,则可能需要计算高程。如果您始终使用提升的权限运行,则无关紧要。