其中是放置PowerShell脚本版本号的标准位置
本文关键字:版本号 标准 位置 脚本 PowerShell | 更新日期: 2023-09-27 17:58:25
自PowerShell版本3以来,出现了定义良好的基于注释的帮助注释块:https://technet.microsoft.com/en-us/library/hh847834.aspx我想知道的是,是否有一个像C#中那样对PowerShell脚本进行版本控制的标准?我正在询问,因为我即将发布一个模块和psd1文件有:
# Version number of this module.
ModuleVersion = '1.0.0.0'
在我自己的脚本中,我使用以下标准:
<#
.SYNOPSIS
<Synopsis goes here>.
.DESCRIPTION
<Description goes here>.
.EXAMPLE
Example.ps1
Runs with default parameters
.NOTES
Author : Glen Buktenica
Version : 1.0.0.0 20160725 Initial Build
#>
在撰写本文(并提出问题)时-Afaik没有这样做的"官方"标准。
我见过人们对脚本进行版本控制的最常用的方法是在。NOTES部分
.NOTES
Version: 1.0
Author: <Name>
Creation Date: <Date>
Purpose/Change: Initial script development
在#requires语句之后,我还在脚本顶部看到了这样的标题。例如:#script 1.0-尽管频率较低
由于这是元信息,您的脚本版本将遵循您的模块版本,我认为这应该是一个很好的解决方案,可以继续做您已经在做的事情(以及我看到的大多数人已经在做)。
更新:有关Powershell的较新版本,请查看新的scriptfileinfo cmdlet:(https://learn.microsoft.com/en-us/powershell/module/powershellget/new-scriptfileinfo?view=powershell-6)
使用ScriptFileInfo
cmdlet,如:New-ScriptFileInfo
<#PSScriptInfo
.VERSION 1.0.1
.GUID 54688e75-298c-4d4b-a2d0-1234567890ab
.AUTHOR iRon
.DESCRIPTION Your description
.COMPANYNAME
.COPYRIGHT
.TAGS PowerShell Version
.LICENSEURI https://github.com/LICENSE
.PROJECTURI https://github.com/
.ICONURI https://Icon.png
.EXTERNALMODULEDEPENDENCIES
.REQUIREDSCRIPTS
.EXTERNALSCRIPTDEPENDENCIES
.RELEASENOTES
.PRIVATEDATA
#>
很遗憾,这并没有标准化,因为它将打开一种从您自己的代码中获取可访问信息的方法。例如,如果要将版本记录在日志文件中,则不希望在cmdlet中的另一个命令中重新定义该版本(因为它可能会被遗忘并与标头不同步)。
在我的标准PowerShell LOg-Entry
框架中,我使用了一些命令来使此程序集信息在默认情况下易于使用:
$My = @{File = Get-ChildItem $MyInvocation.MyCommand.Path; Contents = $MyInvocation.MyCommand.ScriptContents}
If ($My.Contents -Match '^'s*'<#(['s'S]*?)#'>') {$My.Help = $Matches[1].Trim()}
[RegEx]::Matches($My.Help, '(^|['r'n])'s*'.(.+)'s*['r'n]|$') | ForEach {
If ($Caption) {$My.$Caption = $My.Help.SubString($Start, $_.Index - $Start)}
$Caption = $_.Groups[2].ToString().Trim()
$Start = $_.Index + $_.Length
}
$My.Title = $My.Synopsis.Trim().Split("`r`n")[0].Trim()
$My.Notes -Split("'r'n") | ForEach {$Note = $_ -Split(":", 2); If ($Note[0].Trim()) {$My[$Note[0].Trim()] = $Note[1].Trim()}}
$My.Path = $My.File.FullName; $My.Folder = $My.File.DirectoryName; $My.Name = $My.File.BaseName
$My.Arguments = (($MyInvocation.Line + " ") -Replace ("^.*''" + $My.File.Name.Replace(".", "'.") + "['"" ]"), "").Trim()
$My
对象示例:
Name Value
---- -----
DESCRIPTION <Description goes here>.
EXAMPLE Example.ps1...
Name My
Folder C:'Users'User'Scripts'Test'PowerShell
Version 1.0.0.0 20160725 Initial Build
Author Glen Buktenica
NOTES Author : Glen Buktenica...
File C:'Users'User'Scripts'Test'PowerShell'My.ps1
Title <Synopsis goes here>.
Arguments -test
SYNOPSIS <Synopsis goes here>.
Path C:'Users'User'Scripts'Test'PowerShell'My.ps1
Contents <# ...
Help .SYNOPSIS ...
假设NOTES部分如下所示:
.NOTES
Version : 1.6.2
Author : Mary Doe
Created on : 2019-02-06
License : MIT License
Copyright : (c) 2019 Mary Doe
您可以借助以下函数将注释记录转换为哈希表变量:
function GetVersionInfo {
$notes = $null
$notes = @{}
# Get the .NOTES section of the script header comment.
$notesText = (Get-Help -Full $PSCommandPath).alertSet.alert.Text
# Split the .NOTES section by lines.
$lines = ($notesText -split ''r?'n').Trim()
# Iterate through every line.
foreach ($line in $lines) {
if (!$line) {
continue
}
$name = $null
$value = $null
# Split line by the first colon (:) character.
if ($line.Contains(':')) {
$nameValue = $null
$nameValue = @()
$nameValue = ($line -split ':',2).Trim()
$name = $nameValue[0]
if ($name) {
$value = $nameValue[1]
if ($value) {
$value = $value.Trim()
}
if (!($notes.ContainsKey($name))) {
$notes.Add($name, $value)
}
}
}
}
return $notes
}
现在,你可以得到这样的版本
$versionInfo = GetVersionInfo
$versionInfo["Version"]
只需记住遵守关于标头要求的帮助(必须至少有一行空行,必须在脚本顶部,等等);否则,它将不起作用。此外,该函数假定注释条目是带有冒号(:)字符分隔符的单行。