放置PowerShell脚本版本号的标准位置在哪里?

时间:2016-07-25 06:29:01

标签: c# powershell version

自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  
#> 

4 个答案:

答案 0 :(得分:3)

Afaik那里没有&#34;官方&#34;这样做的标准。

最常用的方式我看到人们对脚本进行版本控制就像你在.NOTES部分下做的那样

.NOTES
  Version:        1.0
  Author:         <Name>
  Creation Date:  <Date>
  Purpose/Change: Initial script development

在#requires语句之后,我还在脚本之上看到了这样的标题。例如:#script 1.0 - 虽然不那么频繁

由于这是元信息,您的脚本版本将遵循您的模块版本,我说它应该是一个很好的解决方案,继续做你已经在做的事情(以及我所做的事情)看到大多数人已经在做了。)

答案 1 :(得分:1)

使用code description price order1 quantity order2 quantity 000001 product A 1 10 100 000002 product B 2 20 20 000003 product C 3 30 0 000004 product D 4 0 40 cmdlet,例如:New-ScriptFileInfo

ScriptFileInfo

答案 2 :(得分:0)

实际上很遗憾,这不是标准化的,因为它会打开一种方法来从您自己的代码中访问信息。例如如果要在日志文件中记录该版本,则不希望在cmdlet中的另一个命令中重新定义该版本(仅仅因为它可能会被遗忘并与标头不同步)。

在我的标准PowerShell LOg-Entry framework中,默认情况下,我使用一些命令使这些装配信息易于使用:

$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  ...

答案 3 :(得分:0)

假设您的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"]

请记住要遵守help about header requirements(必须在其后接至少一个空行,必须在脚本顶部将其保留,等等);否则,它将无法正常工作。此外,该函数还假定注释条目为单行,并带有冒号(:)字符定界符。