自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
#>
答案 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(必须在其后接至少一个空行,必须在脚本顶部将其保留,等等);否则,它将无法正常工作。此外,该函数还假定注释条目为单行,并带有冒号(:)字符定界符。