如何确定脚本的版本,并进行更新

时间:2015-06-11 09:40:27

标签: powershell

我正在尝试制作自我更新的脚本,但我不知道该怎么做。 目前我正在运行init脚本,它将最终从samba目录脚本复制到工作目录。

我的脚本将在我们公司的几家商店的150台电脑上运行。 我正在考虑从我的最终脚本和版本中检查版本,如果有更新版本,请下载final.ps1。

版本控制格式为日期yyyymmdd(ex 20150611),易于比较和调试。

首先,我试图从我的最终脚本中获取版本

Function checkVersion {
    Param ([switch]$version)
    if($version) {
      Write-Output "20150611"
  }
}
myscript.ps1 -version

但那不起作用。也许有人试过写类似的功能?

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您希望能够使用参数-Version运行脚本以输出脚本的版本号。您还需要一个(自动)更新函数,该函数调用确定“最新”脚本的版本号,并在远程版本更新的情况下更新当前脚本。

返回版本号的功能可以像这样实现:

[CmdletBinding()]
Param(
  [switch]$Version
)

$MyVersion = '20150611'

if ($Version.IsPresent) {
  $MyVersion
  exit 0
}

更新和重新运行当前文件可以通过以下方式完成:

$scriptPath = $MyInvocation.MyCommand.Path
$mostRecent = '\\server\share\final.ps1'

function Test-Update($file) {
  return ($MyVersion -lt (& $file -Version))
}

if (Test-Update $mostRecent) {
  (Copy-Item $mostRecent $scriptPath -Force)  # Run Copy-Item in an expression, so
                                              # it's completed before re-running
                                              # the script!
  & $scriptPath
  exit 0
}

然而,话虽如此,如果您在文件共享上有最新版本的脚本脚本,为什么不首先从文件共享中运行最新的脚本版本?