如何用帮助系统获取PowerShell可用命令信息
推荐于2016-05-21
展开全部
真正能让读者尽快掌握一门语言的文档应该是官方的帮助文档,利用帮助文档,并且理解好每个技术细节中存在的编程思想,能让用户遇到任何问题举一反三,最终解决问题。
PowerShell中的帮助系统是一个互交式的环境,其中所有的一切均以对象形式出现。可以根据命令任何部分的字面意思找出其所有的属性和方法原型,而忽略其是否为Shell、.NET、COM或者其他部分。本文将介绍如何在PowerShell中获取任何命令的参数和使用方法,以及如何使用内置的帮助获取详细的参数信息,并且使用网络上搜索的信息创建自己的帮助文档。
1 帮助系统
PowerShell的设计者在设计帮助系统的过程中尝试使其简单易用,适应尽可能多的用户使用。所有针对内置命令的帮助内容均用英语做了详细的说明,用户可以使用Get-Help这个cmdlet来查询任何命令的帮助信息。PowerShell也提供了help命令,这是一个调用Get-Help的函数。执行后将输出管道传输到more.com,这样用户即可分页阅读有关的帮助内容。
1.1 基础知识
在控制台提示符下键入help,按回车键后提示help的相关信息,从中可以看到help是Get-Help重新封装过的:
PS C:\Documents and Settings\Administrator> help
TOPIC
Get-Help
SHORT DESCRIPTION
Displays help about Windows PowerShell cmdlets and concepts.
LONG DESCRIPTION
SYNTAX
get-help {<CmdletName> | <TopicName>}
help {<CmdletName> | <TopicName>}
<CmdletName> -?
Examples:
get-help get-process : Displays help about the Get-Process cmdlet.
get-help about_signing : Displays help about the signing and execution pol
icies.
help where-object : Displays help about the Where-Object cmdlet.
help about_foreach : Displays help about foreach loops in PowerShell.
set-service -? : Displays help about the Set-Service cmdlet.
……
可以尝试使用通配符过滤主题,下例中显示所有以“about_”开头的cmdlet的帮助:
PS C:\> help about_*
Name Category Synopsis
---- -------- --------
about_aliases HelpFile Describes how to use alternate n...
about_Arithmetic_operators HelpFile Describes the operators that per...
about_arrays HelpFile A compact data structure for sto...
about_Assignment_operators HelpFile Describes how to use operators t...
about_Automatic_variables HelpFile Describes variables that store s...
about_break HelpFile A statement for immediately exit...
about_install_wsman HelpFile Installs the required version of...
-- More --
可以调用help并传递需要显示的主题名:
PS C:\> help ac
NAME
Add-Content
SYNOPSIS
Adds content to the specified items, such as adding words to a file.
……
上例将Add-Content的别名ac传递给help,相当于获取Add-Content的帮助:
PS C:\> help Add-Content
NAME
Add-Content
SYNOPSIS
Adds content to the specified items, such as adding words to a file.
……
PowerShell为所有已经声明的别名自动添加帮助主题,用户不必知道别名指向的cmdlet,即可同时获取别名及其对应的cmdlet的帮助。
在上述帮助主题中的每个主题都有个关联分类,为所有的内置主题获取分类值可以使用Get-Help cmdlet。下例将集合用管道传递给select获取唯一的分类值:
PS C:\> Get-Help * | select Category -Unique
Category
--------
Alias
Cmdlet
Provider
HelpFile
从中可以看到以下分类值。
(1)Alias:为所有别名自动创建的主题。
(2)Cmdlet:如何使用cmdlet、内置或第三方管理单元的主题文档。
(3)Provider:所有已安装提供程序的主题文档,PowerShell提供的内置提供程序的文档包括Alias、Environment、FileSystem、Function、Registry、Variable和Certificate,完整的自定义提供程序应该添加主题到这个分类中。
(4)HelpFile:概念主题,所有讨论特定语言特性,如分支、循环及变量的about_*主题均属于该分类。
(5)Get-Help:找回基于分类名的主题,下例获取特定语言的主题或者HelpFile分类:
PS C:\> Get-Help -Category HelpFile
Name Category Synopsis
---- -------- --------
about_aliases HelpFile Describes how to use alternate n...
about_Arithmetic_operators HelpFile Describes the operators that per...
about_arrays HelpFile A compact data structure for sto...
about_Assignment_operators HelpFile Describes how to use operators t...
Get-Help和help支持的另外一个重要参数是控制为用户输出的文本数量,可以通过使用-detailed、-full和-example开关来控制。可能的配置如下。
(1)无(默认值):返回值是关于命令简短的介绍,其中包含支持的参数、简短的描述及一两个实例。
(2)-detailed:返回值是较为详细的解释,包括所有参数作用的详细描述,同时附带一系列命令操作的实例。
(3)-full:返回值是所有的帮助信息,包括所有参数的完整信息,以及实例的详细信息。
(4)-example:返回值是完整的实例描述,包括标题、描述和示例代码, 不会返回其他命令的信息。
1.2 参数的详细信息
很多情况下,用户可能只对命令中的一个参数感兴趣,使用Get-Help的-parameter参数获取特定参数的信息。下例获取Get-ChildItem的-filter参数的信息:
PS C:\> Get-Help Get-ChildItem -Parameter filter
-Filter <string>
Specifies a filter in the provider's format or language. The value of this
parameter qualifies the Path parameter. The syntax of the filter, including
the use of wildcards, depends on the provider. Filters are more efficient
than other parameters, because the provider applies them when retrieving th
e objects, rather than having Windows PowerShell filter the objects after t
hey are retrieved.
Required? false
Position? 2
Default value
Accept pipeline input? false
Accept wildcard characters? False
其中的内容是参数的简短描述和格式化后的参数规格清单,包括是否必需、位置(如果是与位置相关的参数)、默认值、管道输入是否被解释为参数值,以及是否支持通配符等。
下例获取Get-Help的parameter参数的信息:
PS C:\> Get-Help Get-Help -Parameter Parameter
-Parameter <string>
Displays a detailed description of the specified parameter. These descripti
ons are included in the Full view of help. Wildcards are permitted.
Required? false
Position? named
Default value
Accept pipeline input? false
Accept wildcard characters? False
有时可以通过这个特性来查看PowerShell的内部结构,掌握一门语言的关键是理解其运行方式。上例说明可以使用通配符获取多个参数的信息,这样即可通过传递*作为参数名获取所有参数,如:
PS C:\> Get-Help Get-ChildItem -Parameter *
-Exclude <string[]>
Omits the specified items. The value of this parameter qualifies the Path p
arameter. Enter a path element or pattern, such as "*.txt". Wildcards are p
ermitted.
This parameter does not work properly in this cmdlet.
Required? false
Position? named
Default value
Accept pipeline input? false
Accept wildcard characters? False
……
如果对不明确或记不清参数名,即可在参数名中使用通配符来获取,如:
PS C:\> Get-Help Get-ChildItem -Parameter fo*
-Force [<SwitchParameter>]
Overrides restrictions that prevent the command from succeeding, just so th
e changes do not compromise security. For example, Force adds hidden files
and directories to the output, but it does not display object that the user
is not permitted to see.
Required? false
Position? named
Default value
Accept pipeline input? false
Accept wildcard characters? false
1.3 高级技巧
PowerShell的帮助系统依靠一种基于Windows Vista的技术,帮助内容保存为基于XML的文件格式。即MAML(Microsoft Assistive Markup Language)中,后期被更名为“AML”(Assistive Markup Lanage)。
根据惯例,PowerShell需要以DLL文件形式命名的管理单元DLL,这样所有cmdlet的开发人员需要遵循这个惯例。下例演示包含处理文件和项目的Microsoft.PowerShell.Management管理单元的帮助文件,首先要获取管理单元:
PS C:\> Get-PSSnapin Microsoft.PowerShell.Management
Name : Microsoft.PowerShell.Management
PSVersion : 2.0
Description : This Windows PowerShell snap-in contains management cmdlets used
to manage Windows components.
.NET编译后,为查看cmdlet类所在宿主DLL文件的位置,执行如下命令:
PS C:\> (Get-PSSnapin Microsoft.PowerShell.Management).ModuleName
C:\WINDOWS\system32\WindowsPowerShell\v1.0\Microsoft.PowerShell.Commands.Management.dll
根据惯例,帮助文件名为“Microsoft.PowerShell.Commands.Management.dll-Help.xml”,它会被区域化并且保存在DLL文件所在的目录或者子区域化子目录中。默认情况下32位Windows Vista操作系统en-US版本的帮助文件在C:\WINDOWS\system32\
WindowsPowerShell\v1.0\en-US中。
为查看典型的帮助文件包含的内容,打开上例中的文档,并查找Add-Contentcmdlet的部分。在XML标签标签中包含的内容如下:
<command:command xmlns:maml=
xmlns:command=""
xmlns:dev="">
<command:details>
<command:name>
Add-Content
</command:name>
<maml:description>
<maml:para>Adds content to the specified items, such as adding words to a file.</maml:para>
</maml:description>
<maml:copyright>
<maml:para></maml:para>
</maml:copyright>
<command:verb>Add</command:verb>
<command:noun>Content</command:noun>
<dev:version></dev:version>
</command:details>
<maml:description>
<maml:para>The Add-Content cmdlet appends content to a specified item or file. You can specify the content by typing the content in the command or by specifying an object that contains the content.</maml:para>
</maml:description>
...
</command:command>
PowerShell作用于对象,而Get-Help返回用户可用的对象。最后得到的对象结构基于AML文档,并且通过XML类型适配器过滤。这就意味着可以访问任何目标属性的详细信息,查询并不直接由Get-Help cmdlet来实现。下例使用Get-Help获取帮助主题:
PS C:\> $h = Get-Help Add-Content
PS C:\> $h
PowerShell中的帮助系统是一个互交式的环境,其中所有的一切均以对象形式出现。可以根据命令任何部分的字面意思找出其所有的属性和方法原型,而忽略其是否为Shell、.NET、COM或者其他部分。本文将介绍如何在PowerShell中获取任何命令的参数和使用方法,以及如何使用内置的帮助获取详细的参数信息,并且使用网络上搜索的信息创建自己的帮助文档。
1 帮助系统
PowerShell的设计者在设计帮助系统的过程中尝试使其简单易用,适应尽可能多的用户使用。所有针对内置命令的帮助内容均用英语做了详细的说明,用户可以使用Get-Help这个cmdlet来查询任何命令的帮助信息。PowerShell也提供了help命令,这是一个调用Get-Help的函数。执行后将输出管道传输到more.com,这样用户即可分页阅读有关的帮助内容。
1.1 基础知识
在控制台提示符下键入help,按回车键后提示help的相关信息,从中可以看到help是Get-Help重新封装过的:
PS C:\Documents and Settings\Administrator> help
TOPIC
Get-Help
SHORT DESCRIPTION
Displays help about Windows PowerShell cmdlets and concepts.
LONG DESCRIPTION
SYNTAX
get-help {<CmdletName> | <TopicName>}
help {<CmdletName> | <TopicName>}
<CmdletName> -?
Examples:
get-help get-process : Displays help about the Get-Process cmdlet.
get-help about_signing : Displays help about the signing and execution pol
icies.
help where-object : Displays help about the Where-Object cmdlet.
help about_foreach : Displays help about foreach loops in PowerShell.
set-service -? : Displays help about the Set-Service cmdlet.
……
可以尝试使用通配符过滤主题,下例中显示所有以“about_”开头的cmdlet的帮助:
PS C:\> help about_*
Name Category Synopsis
---- -------- --------
about_aliases HelpFile Describes how to use alternate n...
about_Arithmetic_operators HelpFile Describes the operators that per...
about_arrays HelpFile A compact data structure for sto...
about_Assignment_operators HelpFile Describes how to use operators t...
about_Automatic_variables HelpFile Describes variables that store s...
about_break HelpFile A statement for immediately exit...
about_install_wsman HelpFile Installs the required version of...
-- More --
可以调用help并传递需要显示的主题名:
PS C:\> help ac
NAME
Add-Content
SYNOPSIS
Adds content to the specified items, such as adding words to a file.
……
上例将Add-Content的别名ac传递给help,相当于获取Add-Content的帮助:
PS C:\> help Add-Content
NAME
Add-Content
SYNOPSIS
Adds content to the specified items, such as adding words to a file.
……
PowerShell为所有已经声明的别名自动添加帮助主题,用户不必知道别名指向的cmdlet,即可同时获取别名及其对应的cmdlet的帮助。
在上述帮助主题中的每个主题都有个关联分类,为所有的内置主题获取分类值可以使用Get-Help cmdlet。下例将集合用管道传递给select获取唯一的分类值:
PS C:\> Get-Help * | select Category -Unique
Category
--------
Alias
Cmdlet
Provider
HelpFile
从中可以看到以下分类值。
(1)Alias:为所有别名自动创建的主题。
(2)Cmdlet:如何使用cmdlet、内置或第三方管理单元的主题文档。
(3)Provider:所有已安装提供程序的主题文档,PowerShell提供的内置提供程序的文档包括Alias、Environment、FileSystem、Function、Registry、Variable和Certificate,完整的自定义提供程序应该添加主题到这个分类中。
(4)HelpFile:概念主题,所有讨论特定语言特性,如分支、循环及变量的about_*主题均属于该分类。
(5)Get-Help:找回基于分类名的主题,下例获取特定语言的主题或者HelpFile分类:
PS C:\> Get-Help -Category HelpFile
Name Category Synopsis
---- -------- --------
about_aliases HelpFile Describes how to use alternate n...
about_Arithmetic_operators HelpFile Describes the operators that per...
about_arrays HelpFile A compact data structure for sto...
about_Assignment_operators HelpFile Describes how to use operators t...
Get-Help和help支持的另外一个重要参数是控制为用户输出的文本数量,可以通过使用-detailed、-full和-example开关来控制。可能的配置如下。
(1)无(默认值):返回值是关于命令简短的介绍,其中包含支持的参数、简短的描述及一两个实例。
(2)-detailed:返回值是较为详细的解释,包括所有参数作用的详细描述,同时附带一系列命令操作的实例。
(3)-full:返回值是所有的帮助信息,包括所有参数的完整信息,以及实例的详细信息。
(4)-example:返回值是完整的实例描述,包括标题、描述和示例代码, 不会返回其他命令的信息。
1.2 参数的详细信息
很多情况下,用户可能只对命令中的一个参数感兴趣,使用Get-Help的-parameter参数获取特定参数的信息。下例获取Get-ChildItem的-filter参数的信息:
PS C:\> Get-Help Get-ChildItem -Parameter filter
-Filter <string>
Specifies a filter in the provider's format or language. The value of this
parameter qualifies the Path parameter. The syntax of the filter, including
the use of wildcards, depends on the provider. Filters are more efficient
than other parameters, because the provider applies them when retrieving th
e objects, rather than having Windows PowerShell filter the objects after t
hey are retrieved.
Required? false
Position? 2
Default value
Accept pipeline input? false
Accept wildcard characters? False
其中的内容是参数的简短描述和格式化后的参数规格清单,包括是否必需、位置(如果是与位置相关的参数)、默认值、管道输入是否被解释为参数值,以及是否支持通配符等。
下例获取Get-Help的parameter参数的信息:
PS C:\> Get-Help Get-Help -Parameter Parameter
-Parameter <string>
Displays a detailed description of the specified parameter. These descripti
ons are included in the Full view of help. Wildcards are permitted.
Required? false
Position? named
Default value
Accept pipeline input? false
Accept wildcard characters? False
有时可以通过这个特性来查看PowerShell的内部结构,掌握一门语言的关键是理解其运行方式。上例说明可以使用通配符获取多个参数的信息,这样即可通过传递*作为参数名获取所有参数,如:
PS C:\> Get-Help Get-ChildItem -Parameter *
-Exclude <string[]>
Omits the specified items. The value of this parameter qualifies the Path p
arameter. Enter a path element or pattern, such as "*.txt". Wildcards are p
ermitted.
This parameter does not work properly in this cmdlet.
Required? false
Position? named
Default value
Accept pipeline input? false
Accept wildcard characters? False
……
如果对不明确或记不清参数名,即可在参数名中使用通配符来获取,如:
PS C:\> Get-Help Get-ChildItem -Parameter fo*
-Force [<SwitchParameter>]
Overrides restrictions that prevent the command from succeeding, just so th
e changes do not compromise security. For example, Force adds hidden files
and directories to the output, but it does not display object that the user
is not permitted to see.
Required? false
Position? named
Default value
Accept pipeline input? false
Accept wildcard characters? false
1.3 高级技巧
PowerShell的帮助系统依靠一种基于Windows Vista的技术,帮助内容保存为基于XML的文件格式。即MAML(Microsoft Assistive Markup Language)中,后期被更名为“AML”(Assistive Markup Lanage)。
根据惯例,PowerShell需要以DLL文件形式命名的管理单元DLL,这样所有cmdlet的开发人员需要遵循这个惯例。下例演示包含处理文件和项目的Microsoft.PowerShell.Management管理单元的帮助文件,首先要获取管理单元:
PS C:\> Get-PSSnapin Microsoft.PowerShell.Management
Name : Microsoft.PowerShell.Management
PSVersion : 2.0
Description : This Windows PowerShell snap-in contains management cmdlets used
to manage Windows components.
.NET编译后,为查看cmdlet类所在宿主DLL文件的位置,执行如下命令:
PS C:\> (Get-PSSnapin Microsoft.PowerShell.Management).ModuleName
C:\WINDOWS\system32\WindowsPowerShell\v1.0\Microsoft.PowerShell.Commands.Management.dll
根据惯例,帮助文件名为“Microsoft.PowerShell.Commands.Management.dll-Help.xml”,它会被区域化并且保存在DLL文件所在的目录或者子区域化子目录中。默认情况下32位Windows Vista操作系统en-US版本的帮助文件在C:\WINDOWS\system32\
WindowsPowerShell\v1.0\en-US中。
为查看典型的帮助文件包含的内容,打开上例中的文档,并查找Add-Contentcmdlet的部分。在XML标签标签中包含的内容如下:
<command:command xmlns:maml=
xmlns:command=""
xmlns:dev="">
<command:details>
<command:name>
Add-Content
</command:name>
<maml:description>
<maml:para>Adds content to the specified items, such as adding words to a file.</maml:para>
</maml:description>
<maml:copyright>
<maml:para></maml:para>
</maml:copyright>
<command:verb>Add</command:verb>
<command:noun>Content</command:noun>
<dev:version></dev:version>
</command:details>
<maml:description>
<maml:para>The Add-Content cmdlet appends content to a specified item or file. You can specify the content by typing the content in the command or by specifying an object that contains the content.</maml:para>
</maml:description>
...
</command:command>
PowerShell作用于对象,而Get-Help返回用户可用的对象。最后得到的对象结构基于AML文档,并且通过XML类型适配器过滤。这就意味着可以访问任何目标属性的详细信息,查询并不直接由Get-Help cmdlet来实现。下例使用Get-Help获取帮助主题:
PS C:\> $h = Get-Help Add-Content
PS C:\> $h
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询