我正在尝试制作自我更新的脚本,但我不知道该怎么做。 目前我正在运行init脚本,它将最终从samba目录脚本复制到工作目录。
我的脚本将在我们公司的几家商店的150台电脑上运行。 我正在考虑从我的最终脚本和版本中检查版本,如果有更新版本,请下载final.ps1。
版本控制格式为日期yyyymmdd(ex 20150611),易于比较和调试。
首先,我试图从我的最终脚本中获取版本
Function checkVersion {
Param ([switch]$version)
if($version) {
Write-Output "20150611"
}
}
myscript.ps1 -version
但那不起作用。也许有人试过写类似的功能?
答案 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
}
然而,话虽如此,如果您在文件共享上有最新版本的脚本脚本,为什么不首先从文件共享中运行最新的脚本版本?