2016-07-25 3 views
1

Так как версия PowerShell 3 была очень четко определена на основе комментариев на основе комментариев комментария: https://technet.microsoft.com/en-us/library/hh847834.aspx Что я хотел бы знать, есть ли стандарт для управления версиями сценария PowerShell, как в C#? Я спрашиваю, как я собираюсь опубликовать модуль и файл psd1 имеет:Где стандартное место для размещения версии версии сценария PowerShell?

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

ответ

2

AFAIK нет «официального» стандарта делает это.

Наиболее частым в употреблении, как я видел, как люди управления версиями свои сценарии являются, как вы делаете в разделе .NOTES

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

Я также видел заголовки, такие как это в верхней части сценария сразу после # запрашивает инструкции. Пример: #script 1.0 - хотя и реже

Поскольку это метаинформация, и ваша версия скрипта будет следовать вашей версии модуля, я бы сказал, что это должно быть хорошим решением, чтобы продолжать делать то, что вы уже делаете (и то, что я видел, большинство людей уже делают).

0

На самом деле жаль, что это не стандартизировано, поскольку оно откроет способ получения информации изнутри вашего собственного кода. например Если вы хотите зарегистрировать версию в файле журнала, вы не хотите переопределять эту версию в другой команде вашего командлета (просто потому, что она может быть забыта и не синхронизироваться с заголовком).

В моей стандартной 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 ... 
Смежные вопросы