如何为powershell函数的description属性添加值?

时间:2016-10-11 20:07:47

标签: powershell

我想填充我在$ PROFILE中创建的Powershell函数的Description属性。我想在Description属性中添加一个值,例如"在个人PROFILE"中创建。这可能吗?

目前,如果我检查我的功能描述,我发现没有填充,例如:

    Get-Command -Type Function -Name get-* | Select-Object -Property Name, Description -First 10

Name                             Description
----                             -----------
Get-AlertLog
Get-AllColors
Get-AppBackgroundTask
Get-AppvVirtualProcess
Get-AppxLastError
Get-AppxLog
Get-AssignedAccess
Get-AutologgerConfig
Get-BCClientConfiguration
Get-BCContentServerConfiguration

填充值后,我可以搜索并快速查看我的功能创建位置,或者他们的功能等等。

谢谢。

+〜+〜+〜+〜+〜+〜+〜+〜+〜+〜+〜+〜+〜+〜+〜+〜+〜+〜+〜+〜+〜+〜+〜 〜+〜+〜+〜+〜+〜+〜+〜+〜+〜+〜+〜+〜+〜+〜+〜+〜

注意:

我不想通过Get-Help检索信息,而是填充Type的一些属性:System.Management.Automation.FunctionInfo:

    Get-Command -Type Function -Name Get-AllColors | Get-Member

TypeName: System.Management.Automation.FunctionInfo

Name                MemberType     Definition
----                ----------     ----------
Equals              Method         bool Equals(System.Object obj)
GetHashCode         Method         int GetHashCode()
GetType             Method         type GetType()
ResolveParameter    Method         System.Management.Automation.ParameterMetadata ResolveParameter(string name)
ToString            Method         string ToString()
CmdletBinding       Property       bool CmdletBinding {get;}
CommandType         Property       System.Management.Automation.CommandTypes CommandType {get;}
DefaultParameterSet Property       string DefaultParameterSet {get;}
Definition          Property       string Definition {get;}
Description         Property       string Description {get;set;}
HelpFile            Property       string HelpFile {get;}
Module              Property       psmoduleinfo Module {get;}
ModuleName          Property       string ModuleName {get;}
Name                Property       string Name {get;}
Noun                Property       string Noun {get;}
Options             Property       System.Management.Automation.ScopedItemOptions Options {get;set;}
OutputType          Property       System.Collections.ObjectModel.ReadOnlyCollection[System.Management.Automation.PS...
Parameters          Property       System.Collections.Generic.Dictionary[string,System.Management.Automation.Paramet...
ParameterSets       Property       System.Collections.ObjectModel.ReadOnlyCollection[System.Management.Automation.Co...
RemotingCapability  Property       System.Management.Automation.RemotingCapability RemotingCapability {get;}
ScriptBlock         Property       scriptblock ScriptBlock {get;}
Source              Property       string Source {get;}
Verb                Property       string Verb {get;}
Version             Property       version Version {get;}
Visibility          Property       System.Management.Automation.SessionStateEntryVisibility Visibility {get;set;}
HelpUri             ScriptProperty System.Object HelpUri {get=$oldProgressPreference = $ProgressPreference...

要问的另一种方法是"如果无法使用值填充属性并通过Select-Object -Property检索它们,为什么会有这样的类型?"

谢谢。

4 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

您可以使用Comment-Based Help向您的功能添加说明(以及许多其他信息):

 SYNTAX FOR COMMENT-BASED HELP
    The syntax for comment-based help is as follows:

        # .< help keyword>
        # <help content>

    -or -

        <#
            .< help keyword>
            < help content>
        #>

示例:

function Add-Extension 
{
        param ([string]$Name,[string]$Extension = "txt")
        $name = $name + "." + $extension
        $name

    <#
    .SYNOPSIS 
    Adds a file name extension to a supplied name.

    .DESCRIPTION
    Adds a file name extension to a supplied name. 
    Takes any strings for the file name or extension.
    }

答案 2 :(得分:0)

到目前为止,响应并没有回答所提出的实际问题,这是一个很好的问题,即使添加帮助是一个好的和有用的想法,无论是基于注释还是完整的XML帮助。

问题在于,基于注释的帮助仅提供&#34;描述&#34;对于函数HELP,而不是运行Get-Command时显示的属性。

使用Get-Command获取描述是一个非常有用且独立的想法。

但是,函数的某些属性是(直接)可设置的,我们可以通过原始问题中显示的 Get-Member -membertype属性来发现它,其输出包括(部分)答案:

Description         Property       string Description {get;set;}

会员财产&#39;描述&#39;可以直接设置,,如属性定义的结尾所示:{get; set ;}:

答案:因此我们可以通过直接分配轻松设置函数实际定义属性:*

   (Get-Command -Type Function -Name Get-AllColors).Description = 'Defined in $Profile'
# or
    (Get-Command -Type Function -Name Get-AllColors).Description = "Defined in the $Profile"

我们可以很容易地找到所有可直接设置的属性。

gcm mypshost | get-member | findstr "set;"
#  Typically only shows 3 properties unless the function was defined in a module
Description
Options
Visibility

或许甚至更好的是设置&#34;来源&#34;现在包含在Get-Command的默认输出中的属性(虽然这不是通过直接赋值设置的。)

使用适当的&#34;模块清单&#34;在模块中创建功能。允许设置大多数/所有这些属性,这些属性在直接定义的函数上通常是空白的。

来源将是&#34;模块&#34;定义函数,如果在模块中设置了版本,也将设置版本。

不幸的是,&#34; Set-ItemProperty&#34; &#34;功能&#34;不支持命令。 PSProvider(由Registry Provider和许多其他人提供。以下失败(在版本2.0和5.1上):

Set-ItemProperty function:mypshost -Name Description -Value 'only testing'

虽然它适用于文件的类似语法:

Set-ItemProperty(dir ic.ps1)-Name LastWriteTime -Value(get-date)

另一个例子是&#34; OutputType&#34;可以使用高级函数参数块的[CmdletBinding()]属性中的一个选项进行设置:

答案 3 :(得分:0)

我认为HerbM在寻找的是快速提醒功能的功能,而不是替代帮助。两者都有很好的理由。例如,我有一个显示命令列表然后执行的函数。如果输入:

示例

gcm na|select -property name,description,DisplayName
Name Description                        DisplayName
---- -----------                        -----------
NA   RB Do a command with no arguments. NA -> Do_Noarg

GCM列出了创建别名NA时所包含的简短描述。

如果GCM还列出功能说明而不是空白,将很有用:

示例

gcm do_noarg|select -property name,description,Definition

Name     Description Definition
----     ----------- ----------
Do_Noarg              dr      ~\PS1\No_Arg\*.ps1 Invoke-Expression

我相信HerbM并不是在寻找gcm或任何其他工具来代替帮助,而只是希望对功能进行快速的单行描述。 如果Description仅是将来发布的“功能”的占位符,那么请告知所有人。