第 2 章 - 帮助系统

在旨在评估 PowerShell 熟练程度的实验中,首先获得了两组不同的 IT 专业人员(初学者和专家)的笔试,而无法访问计算机。 令人惊讶的是,测试分数表明两组的可比技能。 随后进行了一次测试,反映了第一个但有一个关键区别:参与者有权访问配备 PowerShell 的脱机计算机。 结果显示,这次两组之间的技能差距很大。

哪些因素促成了两项评估之间观察到的结果?

专家不一定总是知道答案,但是他们知道如何得到答案。

这两项测试结果中观察到的结果是因为专家不会记住数千个 PowerShell 命令。 相反,他们擅长在 PowerShell 中使用帮助系统,使它们能够发现并在必要时了解如何使用命令。

熟悉帮助系统是 PowerShell 取得成功的关键。

我听到 PowerShell 的创建者 Jeffrey Snover 多次分享类似的故事。

可发现性

PowerShell 中的编译命令称为 cmdlet,发音为“command-let”,而不是“CMD-let”。 cmdlet 的命名约定遵循单一 谓词名词 格式,使其易于发现。 例如, Get-Process 用于确定正在运行的进程的 cmdlet,以及 Get-Service 用于检索服务列表的 cmdlet。 函数(也称为脚本 cmdlet)和别名是本文稍后讨论的其他类型的 PowerShell 命令。 术语 “PowerShell 命令” 描述 PowerShell 中的任何命令,无论它是 cmdlet、函数还是别名。

还可以从 PowerShell 运行操作系统本机命令,例如传统的命令行程序,例如 ping.exeipconfig.exe

PowerShell 中的三个核心 cmdlet

  • Get-Help
  • Get-Command
  • Get-Member(在第 3 章中介绍此内容)

我经常被问及:“如何弄清楚 PowerShell 中的命令是什么? 这两个资源 Get-Help 都是 Get-Command 在 PowerShell 中发现和理解命令的宝贵资源。

Get-Help

在 PowerShell 中,首先需要了解的帮助系统是如何使用 Get-Help cmdlet。

Get-Help 是一个多用途命令,可帮助你了解如何在找到命令后使用命令。 还可以用于 Get-Help 查找命令,但在与命令相比 Get-Command时,可以采用不同和更间接的方式查找命令。

使用 Get-Help 查找命令时,它最初会根据输入对命令名称执行通配符搜索。 如果找不到任何匹配项,它将在系统上的所有 PowerShell 帮助文章中执行全面的全文搜索。 如果这也找不到任何结果,它将返回错误。

下面介绍如何查看 Get-Help cmdlet 的 Get-Help 帮助内容。

Get-Help -Name Get-Help

从 PowerShell 版本 3.0 开始,帮助内容不会预安装操作系统。 首次运行时 Get-Help ,系统会询问是否要将 PowerShell 帮助文件下载到计算机。

通过按 Y 回答是,执行 Update-Help cmdlet,下载帮助内容。

Do you want to run Update-Help?
The Update-Help cmdlet downloads the most current Help files for Windows
PowerShell modules, and installs them on your computer. For more information
about the Update-Help cmdlet, see
https:/go.microsoft.com/fwlink/?LinkId=210614.
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"):

如果未收到此消息,请从以管理员身份运行的提升的 PowerShell 会话运行 Update-Help

更新完成后,将显示帮助文章。

花点时间在计算机上运行该示例,查看输出,并观察帮助系统如何组织信息。

  • 名称
  • 摘要
  • SYNTAX
  • DESCRIPTION
  • 相关链接
  • REMARKS

查看输出时,请记住,帮助文章通常包含大量信息,默认情况下看到的不是整个帮助文章。

参数

在 PowerShell 中运行命令时,可能需要向命令提供其他信息或输入。 通过参数可以指定更改命令行为的选项和参数。 每个 帮助文章的 SYNTAX 部分概述了命令的可用参数。

Get-Help 有多个参数,可以指定用于返回命令的整个帮助项目或子集。 若要查看其帮助文章的所有可用参数 Get-Help,请参阅 其帮助文章的 SYNTAX 部分,如以下示例所示。

...
SYNTAX
    Get-Help [[-Name] <System.String>] [-Category {Alias | Cmdlet | Provider
    | General | FAQ | Glossary | HelpFile | ScriptCommand | Function |
    Filter | ExternalScript | All | DefaultHelp | Workflow | DscResource |
    Class | Configuration}] [-Component <System.String[]>] [-Full]
    [-Functionality <System.String[]>] [-Path <System.String>] [-Role
    <System.String[]>] [<CommonParameters>]

    Get-Help [[-Name] <System.String>] [-Category {Alias | Cmdlet | Provider
    | General | FAQ | Glossary | HelpFile | ScriptCommand | Function |
    Filter | ExternalScript | All | DefaultHelp | Workflow | DscResource |
    Class | Configuration}] [-Component <System.String[]>] -Detailed
    [-Functionality <System.String[]>] [-Path <System.String>] [-Role
    <System.String[]>] [<CommonParameters>]

    Get-Help [[-Name] <System.String>] [-Category {Alias | Cmdlet | Provider
    | General | FAQ | Glossary | HelpFile | ScriptCommand | Function |
    Filter | ExternalScript | All | DefaultHelp | Workflow | DscResource |
    Class | Configuration}] [-Component <System.String[]>] -Examples
    [-Functionality <System.String[]>] [-Path <System.String>] [-Role
    <System.String[]>] [<CommonParameters>]

    Get-Help [[-Name] <System.String>] [-Category {Alias | Cmdlet | Provider
    | General | FAQ | Glossary | HelpFile | ScriptCommand | Function |
    Filter | ExternalScript | All | DefaultHelp | Workflow | DscResource |
    Class | Configuration}] [-Component <System.String[]>] [-Functionality
    <System.String[]>] -Online [-Path <System.String>] [-Role
    <System.String[]>] [<CommonParameters>]

    Get-Help [[-Name] <System.String>] [-Category {Alias | Cmdlet | Provider
    | General | FAQ | Glossary | HelpFile | ScriptCommand | Function |
    Filter | ExternalScript | All | DefaultHelp | Workflow | DscResource |
    Class | Configuration}] [-Component <System.String[]>] [-Functionality
    <System.String[]>] -Parameter <System.String> [-Path <System.String>]
    [-Role <System.String[]>] [<CommonParameters>]

    Get-Help [[-Name] <System.String>] [-Category {Alias | Cmdlet | Provider
    | General | FAQ | Glossary | HelpFile | ScriptCommand | Function |
    Filter | ExternalScript | All | DefaultHelp | Workflow | DscResource |
    Class | Configuration}] [-Component <System.String[]>] [-Functionality
    <System.String[]>] [-Path <System.String>] [-Role <System.String[]>]
    -ShowWindow [<CommonParameters>]
...

参数集

查看 语法 部分 Get-Help时,请注意信息似乎重复了六次。 每个块都是单个参数集,指示 Get-Help cmdlet 具有六组不同的参数。 仔细查看可显示每个参数集至少包含一个唯一参数,使其与其他参数不同。

参数集是互斥的。 指定仅存在于一个参数集中的唯一参数后,PowerShell 会限制你使用该参数集中包含的参数。 例如,不能同时使用 “完整 ”和 “详细 ”参数 Get-Help ,因为它们属于不同的参数集。

以下每个参数都属于 cmdlet 的不同参数集 Get-Help

  • 完全
  • 详细
  • 示例
  • 联机
  • 参数
  • ShowWindow

命令语法

如果你不熟悉 PowerShell,请理解语法部分中的神秘信息(以方括号和尖括号为特征),这看起来是压倒性的。 但是,学习这些语法元素对于熟悉 PowerShell 至关重要。 使用 PowerShell 帮助系统的频率越多,记住所有细微差别就越容易。

查看 cmdlet 的 Get-EventLog 语法。

Get-Help Get-EventLog

以下输出显示了帮助文章的相关部分。

...
SYNTAX
    Get-EventLog [-LogName] <System.String> [[-InstanceId]
    <System.Int64[]>] [-After <System.DateTime>] [-AsBaseObject] [-Before
    <System.DateTime>] [-ComputerName <System.String[]>] [-EntryType {Error
    | Information | FailureAudit | SuccessAudit | Warning}] [-Index
    <System.Int32[]>] [-Message <System.String>] [-Newest <System.Int32>]
    [-Source <System.String[]>] [-UserName <System.String[]>]
    [<CommonParameters>]

    Get-EventLog [-AsString] [-ComputerName <System.String[]>] [-List]
    [<CommonParameters>]
...

语法信息包括方括号对([])。 根据它们的用法,这些方括号提供两种不同的用途。

  • 括在方括号中的元素是可选的。
  • 数据类型后面的空方括号集,例如 <string[]>,指示参数可以接受作为数组或集合对象传递的多个值。

位置参数

某些 cmdlet 旨在接受位置参数。 位置参数允许你提供一个值,而无需指定参数的名称。 在位置上使用参数时,必须在命令行上的正确位置指定其值。 可以在命令帮助文章的 PARAMETERS 部分找到参数的位置信息。 显式指定参数名称时,可以按任意顺序使用参数。

Get-EventLog对于 cmdlet,第一个参数集中的第一个参数是 LogNameLogName 括在方括号中,表示它是一个位置参数。

Get-EventLog [-LogName] <System.String>

由于 LogName 是一个位置参数,因此可以通过名称或位置指定它。 根据参数名称后面的尖括号,LogName 的值必须是单个字符串。 缺少括住参数名称和数据类型的方括号表示 LogName 是此特定参数集中的必需参数。

该参数集中的第二个参数是 InstanceId。 参数名称和数据类型都完全括在方括号中,表示 InstanceId 是可选参数。

[[-InstanceId] <System.Int64[]>]

此外, InstanceId 有自己的方括号对,指示它是类似于 LogName 参数的位置参数。 在数据类型之后,一组空的方括号意味着 InstanceId 可以接受多个值。

开关参数

不需要值的参数称为开关参数。 可以轻松识别开关参数,因为参数名称后没有数据类型。 指定 switch 参数时,其值为 true. 如果未指定 switch 参数,则其值为 false.

第二个参数集包括一个 List 参数,它是一个 switch 参数。 指定 List 参数时,它会返回本地计算机上的事件日志列表。

[-List]

语法的简化方法

除了普通英语,还有一种更用户友好的方法来获取与某些命令的神秘命令语法相同的信息。 使用 Full 参数时Get-Help,PowerShell 将返回完整的帮助文章,以便更轻松地理解命令的用法。

Get-Help -Name Get-Help -Full

花点时间在计算机上运行该示例,查看输出,并观察帮助系统如何组织信息。

  • 名称
  • 摘要
  • SYNTAX
  • DESCRIPTION
  • PARAMETERS
  • 输入
  • 输出
  • 说明
  • 示例
  • 相关链接

通过使用 cmdlet 指定 Full 参数 Get-Help ,输出包含多个额外的部分。 在这些部分中, PARAMETERS 通常为每个参数提供详细说明。 但是,此信息的范围因要调查的特定命令而异。

...
    -Detailed <System.Management.Automation.SwitchParameter>
        Adds parameter descriptions and examples to the basic help display.
        This parameter is effective only when the help files are installed
        on the computer. It has no effect on displays of conceptual ( About_
        ) help.

        Required?                    true
        Position?                    named
        Default value                False
        Accept pipeline input?       False
        Accept wildcard characters?  false

    -Examples <System.Management.Automation.SwitchParameter>
        Displays only the name, synopsis, and examples. This parameter is
        effective only when the help files are installed on the computer. It
        has no effect on displays of conceptual ( About_ ) help.

        Required?                    true
        Position?                    named
        Default value                False
        Accept pipeline input?       False
        Accept wildcard characters?  false

    -Full <System.Management.Automation.SwitchParameter>
        Displays the entire help article for a cmdlet. Full includes
        parameter descriptions and attributes, examples, input and output
        object types, and additional notes.

        This parameter is effective only when the help files are installed
        on the computer. It has no effect on displays of conceptual ( About_
        ) help.

        Required?                    false
        Position?                    named
        Default value                False
        Accept pipeline input?       False
        Accept wildcard characters?  false
...

运行上一个命令以显示命令的 Get-Help 帮助时,你可能会注意到输出滚动得太快,无法读取它。

如果使用 PowerShell 控制台、Windows 终端或 VS Code,并且需要查看帮助文章,该help函数可能很有用。 它通过管道将输出传递给该输出Get-Helpmore.com,一次显示一页帮助内容。 我建议使用 help 函数而不是 Get-Help cmdlet,因为它提供了更好的用户体验,并且键入效果较低。

注意

ISE 不支持使用 more.com,因此运行 help 的工作方式与 Get-Help< a0/> 相同。

在计算机上的 PowerShell 中运行以下命令。

Get-Help -Name Get-Help -Full
help -Name Get-Help -Full
help Get-Help -Full

运行上述命令时,是否观察到输出中的任何变体?

在前面的示例中,第一行使用 Get-Help cmdlet,第二行使用help函数,第三行在使用help函数时省略 Name 参数。 由于 Name 是位置参数,因此第三个示例利用其位置,而不是显式声明参数的名称。

区别在于,最后两个命令一次显示其输出一页。 使用 help 函数时,按 空格键 显示下一页的内容或 Q 退出。 如果需要终止在 PowerShell 中以交互方式运行的任何命令,请按 Ctrl+C。

若要快速查找有关特定参数的信息,请使用 Parameter 参数 。 此方法仅返回包含特定于参数的信息的内容,而不是整个帮助文章。 这是查找有关特定参数的信息的最简单方法。

以下示例使用help带 Parameter 参数的函数从帮助文章中返回 Name 参数Get-Help的信息。

help Get-Help -Parameter Name

帮助信息显示 Name 参数是位置参数,在使用位置时必须在第一个位置(位置零)中指定。

-Name <System.String>
    Gets help about the specified command or concept. Enter the name of a
    cmdlet, function, provider, script, or workflow, such as `Get-Member`,
    a conceptual article name, such as `about_Objects`, or an alias, such
    as `ls`. Wildcard characters are permitted in cmdlet and provider
    names, but you can't use wildcard characters to find the names of
    function help and script help articles.

    To get help for a script that isn't located in a path that's listed in
    the `$env:Path` environment variable, type the script's path and file
    name.

    If you enter the exact name of a help article, `Get-Help` displays the
    article contents.

    If you enter a word or word pattern that appears in several help
    article titles, `Get-Help` displays a list of the matching titles.

    If you enter any text that doesn't match any help article titles,
    `Get-Help` displays a list of articles that include that text in their
    contents.

    The names of conceptual articles, such as `about_Objects`, must be
    entered in English, even in non-English versions of PowerShell.

    Required?                    false
    Position?                    0
    Default value                None
    Accept pipeline input?       True (ByPropertyName)
    Accept wildcard characters?  true

Name 参数需要参数名称旁边的数据类型标识<String>的字符串值。

可以指定 Get-Help 几个其他参数来返回帮助文章的子集。 若要查看工作原理,请在计算机上运行以下命令。

Get-Help -Name Get-Command -Full
Get-Help -Name Get-Command -Detailed
Get-Help -Name Get-Command -Examples
Get-Help -Name Get-Command -Online
Get-Help -Name Get-Command -Parameter Noun
Get-Help -Name Get-Command -ShowWindow

我通常将 help <command name> 与 Full 或 Online 参数一起使用。 如果只对示例感兴趣,请使用 Examples 参数。 如果只对特定参数感兴趣,请使用 Parameter 参数

使用 ShowWindow 参数时,它会在单独的可搜索窗口中显示帮助内容。 如果有多个监视器,可以将该窗口移动到其他监视器。 但是, ShowWindow 参数有一个已知 bug,可能会阻止它显示整个帮助文章。 ShowWindow 参数还需要具有图形用户界面(GUI)的操作系统。 当你尝试在 Windows Server Core 上使用它时,它将返回错误。

如果具有 Internet 访问权限,则可以改用 Online 参数。 Online 参数将在默认 Web 浏览器中打开帮助文章。 联机内容是最新的内容。 使用浏览器可以搜索帮助内容并查看其他相关帮助文章。

注意

About 文章不支持 Online 参数。

help Get-Command -Online

使用 Get-Help 查找命令

若要使用 查找命令Get-Help,请为 Name 参数的值指定用星号 (*) 通配符括起来的搜索词。 以下示例以位置方式使用 Name 参数。

help *process*
Name                              Category  Module                    Synops
----                              --------  ------                    ------
Enter-PSHostProcess               Cmdlet    Microsoft.PowerShell.Core Con...
Exit-PSHostProcess                Cmdlet    Microsoft.PowerShell.Core Clo...
Get-PSHostProcessInfo             Cmdlet    Microsoft.PowerShell.Core Get...
Debug-Process                     Cmdlet    Microsoft.PowerShell.M... Deb...
Get-Process                       Cmdlet    Microsoft.PowerShell.M... Get...
Start-Process                     Cmdlet    Microsoft.PowerShell.M... Sta...
Stop-Process                      Cmdlet    Microsoft.PowerShell.M... Sto...
Wait-Process                      Cmdlet    Microsoft.PowerShell.M... Wai...
Invoke-LapsPolicyProcessing       Cmdlet    LAPS                      Inv...
ConvertTo-ProcessMitigationPolicy Cmdlet    ProcessMitigations        Con...
Get-ProcessMitigation             Cmdlet    ProcessMitigations        Get...
Set-ProcessMitigation             Cmdlet    ProcessMitigations        Set...

在此方案中,无需添加 * 通配符。 如果 Get-Help 找不到与提供的值匹配的命令,它将对该值执行全文搜索。 下面的示例生成的结果与在每一端process指定*通配符时的结果相同。

help process

在值中指定通配符时, Get-Help 仅搜索与提供的模式匹配的命令。 它不执行全文搜索。 以下命令不返回任何结果。

help pr*cess

如果指定一个以短划线开头的值而不将其括在引号中,则 PowerShell 将生成错误,因为它将其解释为参数名称。 cmdlet 不存在此类参数名称 Get-Help

help -process

如果要尝试搜索以结尾 -process的命令,则必须向值的开头添加一个 *

help *-process

搜索 PowerShell 命令 Get-Help时,最好是含糊不清,而不是过于具体。

在之前搜索 process 时,结果只返回了名称中包含的 process 命令。 但是,如果搜索 processes,它找不到命令名称的任何匹配项。 如前所述,当帮助找不到任何匹配项时,它会对系统上的每个帮助文章执行全面的全文搜索,并返回这些结果。 这种类型的搜索通常产生的结果多于预期,包括与你无关的信息。

help processes
Name                              Category  Module                    Synops
----                              --------  ------                    ------
Disconnect-PSSession              Cmdlet    Microsoft.PowerShell.Core Dis...
Enter-PSHostProcess               Cmdlet    Microsoft.PowerShell.Core Con...
ForEach-Object                    Cmdlet    Microsoft.PowerShell.Core Per...
Get-PSHostProcessInfo             Cmdlet    Microsoft.PowerShell.Core Get...
Get-PSSessionConfiguration        Cmdlet    Microsoft.PowerShell.Core Get...
New-PSSessionOption               Cmdlet    Microsoft.PowerShell.Core Cre...
New-PSTransportOption             Cmdlet    Microsoft.PowerShell.Core Cre...
Out-Host                          Cmdlet    Microsoft.PowerShell.Core Sen...
Start-Job                         Cmdlet    Microsoft.PowerShell.Core Sta...
Where-Object                      Cmdlet    Microsoft.PowerShell.Core Sel...
Debug-Process                     Cmdlet    Microsoft.PowerShell.M... Deb...
Get-Process                       Cmdlet    Microsoft.PowerShell.M... Get...
Get-WmiObject                     Cmdlet    Microsoft.PowerShell.M... Get...
Start-Process                     Cmdlet    Microsoft.PowerShell.M... Sta...
Stop-Process                      Cmdlet    Microsoft.PowerShell.M... Sto...
Wait-Process                      Cmdlet    Microsoft.PowerShell.M... Wai...
Clear-Variable                    Cmdlet    Microsoft.PowerShell.U... Del...
Convert-String                    Cmdlet    Microsoft.PowerShell.U... For...
ConvertFrom-Csv                   Cmdlet    Microsoft.PowerShell.U... Con...
ConvertFrom-Json                  Cmdlet    Microsoft.PowerShell.U... Con...
ConvertTo-Html                    Cmdlet    Microsoft.PowerShell.U... Con...
ConvertTo-Xml                     Cmdlet    Microsoft.PowerShell.U... Cre...
Debug-Runspace                    Cmdlet    Microsoft.PowerShell.U... Sta...
Export-Csv                        Cmdlet    Microsoft.PowerShell.U... Con...
Export-FormatData                 Cmdlet    Microsoft.PowerShell.U... Sav...
Format-List                       Cmdlet    Microsoft.PowerShell.U... For...
Format-Table                      Cmdlet    Microsoft.PowerShell.U... For...
Get-Unique                        Cmdlet    Microsoft.PowerShell.U... Ret...
Group-Object                      Cmdlet    Microsoft.PowerShell.U... Gro...
Import-Clixml                     Cmdlet    Microsoft.PowerShell.U... Imp...
Import-Csv                        Cmdlet    Microsoft.PowerShell.U... Cre...
Measure-Object                    Cmdlet    Microsoft.PowerShell.U... Cal...
Out-File                          Cmdlet    Microsoft.PowerShell.U... Sen...
Out-GridView                      Cmdlet    Microsoft.PowerShell.U... Sen...
Select-Object                     Cmdlet    Microsoft.PowerShell.U... Sel...
Set-Variable                      Cmdlet    Microsoft.PowerShell.U... Set...
Sort-Object                       Cmdlet    Microsoft.PowerShell.U... Sor...
Tee-Object                        Cmdlet    Microsoft.PowerShell.U... Sav...
Trace-Command                     Cmdlet    Microsoft.PowerShell.U... Con...
Write-Information                 Cmdlet    Microsoft.PowerShell.U... Spe...
Export-BinaryMiLog                Cmdlet    CimCmdlets                Cre...
Get-CimAssociatedInstance         Cmdlet    CimCmdlets                Ret...
Get-CimInstance                   Cmdlet    CimCmdlets                Get...
Import-BinaryMiLog                Cmdlet    CimCmdlets                Use...
Invoke-CimMethod                  Cmdlet    CimCmdlets                Inv...
New-CimInstance                   Cmdlet    CimCmdlets                Cre...
Remove-CimInstance                Cmdlet    CimCmdlets                Rem...
Set-CimInstance                   Cmdlet    CimCmdlets                Mod...
Compress-Archive                  Function  Microsoft.PowerShell.A... Cre...
Get-Counter                       Cmdlet    Microsoft.PowerShell.D... Get...
Invoke-WSManAction                Cmdlet    Microsoft.WSMan.Manage... Inv...
Remove-WSManInstance              Cmdlet    Microsoft.WSMan.Manage... Del...
Get-WSManInstance                 Cmdlet    Microsoft.WSMan.Manage... Dis...
New-WSManInstance                 Cmdlet    Microsoft.WSMan.Manage... Cre...
Set-WSManInstance                 Cmdlet    Microsoft.WSMan.Manage... Mod...
about_Arithmetic_Operators        HelpFile
about_Arrays                      HelpFile
about_Environment_Variables       HelpFile
about_Execution_Policies          HelpFile
about_Functions                   HelpFile
about_Jobs                        HelpFile
about_Logging                     HelpFile
about_Methods                     HelpFile
about_Objects                     HelpFile
about_Pipelines                   HelpFile
about_Preference_Variables        HelpFile
about_Remote                      HelpFile
about_Remote_Jobs                 HelpFile
about_Session_Configuration_Files HelpFile
about_Simplified_Syntax           HelpFile
about_Switch                      HelpFile
about_Variables                   HelpFile
about_Variable_Provider           HelpFile
about_Windows_Powershell_5.1      HelpFile
about_WQL                         HelpFile
about_WS-Management_Cmdlets       HelpFile
about_Foreach-Parallel            HelpFile
about_Parallel                    HelpFile
about_Sequence                    HelpFile

搜索 process时,返回 12 个结果。 但是,搜索 processes时,它生成了 78 个结果。 如果搜索仅找到一个匹配项, Get-Help 则显示帮助内容,而不是列出搜索结果。

help *hotfix*
NAME
    Get-HotFix

SYNOPSIS
    Gets the hotfixes that are installed on local or remote computers.


SYNTAX
    Get-HotFix [-ComputerName <System.String[]>] [-Credential
    <System.Management.Automation.PSCredential>] [-Description
    <System.String[]>] [<CommonParameters>]

    Get-HotFix [[-Id] <System.String[]>] [-ComputerName <System.String[]>]
    [-Credential <System.Management.Automation.PSCredential>]
    [<CommonParameters>]


DESCRIPTION
    > This cmdlet is only available on the Windows platform. The
    `Get-Hotfix` cmdlet uses the Win32_QuickFixEngineering WMI class to
    list hotfixes that are installed on the local computer or specified
    remote computers.


RELATED LINKS
    Online Version: https://learn.microsoft.com/powershell/module/microsoft.
    powershell.management/get-hotfix?view=powershell-5.1&WT.mc_id=ps-gethelp
    about_Arrays
    Add-Content
    Get-ComputerRestorePoint
    Get-Credential
    Win32_QuickFixEngineering class

REMARKS
    To see the examples, type: "get-help Get-HotFix -examples".
    For more information, type: "get-help Get-HotFix -detailed".
    For technical information, type: "get-help Get-HotFix -full".
    For online help, type: "get-help Get-HotFix -online"

还可以查找缺少帮助文章的 Get-Help命令,尽管此功能并不常见。 该 more 函数是没有帮助文章的命令之一。 若要确认可以找到不包含帮助文章的命令 Get-Help ,请使用 help 函数查找 more

help *more*

搜索仅找到一个匹配项,因此它返回了命令没有帮助文章时看到的基本语法信息。

NAME
    more

SYNTAX
    more [[-paths] <string[]>]

ALIASES
    None

REMARKS
    None

PowerShell 帮助系统还包含有关帮助文章的概念。 必须更新系统上的帮助内容才能获取 “关于” 文章。 有关详细信息,请参阅本章的 “更新帮助 ”部分。

使用以下命令返回系统上所有 关于 帮助文章的列表。

help About_*

将结果限制为“ 关于 ”帮助文章时, Get-Help 显示该文章的内容。

help about_Updatable_Help

更新帮助

在本章的前面部分,你在首次运行 Get-Help cmdlet 时更新了计算机上的 PowerShell 帮助文章。 应定期在计算机上运行 Update-Help cmdlet,以获取对帮助内容的任何更新。

重要

在 Windows PowerShell 5.1 中,必须在提升的 PowerShell 会话中以管理员身份运行 Update-Help

在以下示例中, Update-Help 下载计算机上安装的所有模块的 PowerShell 帮助内容。 应使用 Force 参数来确保下载最新版本的帮助内容。

Update-Help -Force

如以下结果所示,模块返回错误。 错误并不常见,通常在模块的作者未正确配置可更新帮助时发生。

Update-Help : Failed to update Help for the module(s) 'BitsTransfer' with UI
culture(s) {en-US} : Unable to retrieve the HelpInfo XML file for UI culture
en-US. Make sure the HelpInfoUri property in the module manifest is valid or
check your network connection and then try the command again.
At line:1 char:1
+ Update-Help
+ ~~~~~~~~~~~
    + CategoryInfo          : ResourceUnavailable: (:) [Update-Help], Except
   ion
    + FullyQualifiedErrorId : UnableToRetrieveHelpInfoXml,Microsoft.PowerShe
   ll.Commands.UpdateHelpCommand

Update-Help 需要 Internet 访问权限才能下载帮助内容。 如果计算机没有 Internet 访问权限,请使用 Save-Help 具有 Internet 访问权限的计算机上的 cmdlet 下载并保存更新的帮助内容。 然后,使用 SourcePath 参数 Update-Help 指定已保存的已更新帮助内容的位置。

Get-Command

Get-Command 是另一个多用途命令,可帮助你查找命令。 在没有任何参数的情况下运行时 Get-Command ,它会返回系统上所有 PowerShell 命令的列表。 还可以用于 Get-Command 获取类似于 Get-Help. 的命令语法。

如何确定其 Get-Command语法? 可用于 Get-Help 显示帮助文章 Get-Command,如本章的 Get-Help 部分所示。 还可以与语法参数一Get-Command起使用,以查看任何命令的语法。 此快捷方式可帮助你快速确定如何在不浏览其帮助内容的情况下使用命令。

Get-Command -Name Get-Command -Syntax

Get-Command语法参数一起使用可提供更简洁的语法视图,用于显示参数及其值类型,而不列出特定的允许值,如Get-Help显示。

Get-Command [[-ArgumentList] <Object[]>] [-Verb <string[]>]
[-Noun <string[]>] [-Module <string[]>]
[-FullyQualifiedModule <ModuleSpecification[]>] [-TotalCount <int>]
[-Syntax] [-ShowCommandInfo] [-All] [-ListImported]
[-ParameterName <string[]>] [-ParameterType <PSTypeName[]>]
[<CommonParameters>]

Get-Command [[-Name] <string[]>] [[-ArgumentList] <Object[]>]
[-Module <string[]>] [-FullyQualifiedModule <ModuleSpecification[]>]
[-CommandType <CommandTypes>] [-TotalCount <int>] [-Syntax]
[-ShowCommandInfo] [-All] [-ListImported] [-ParameterName <string[]>]
[-ParameterType <PSTypeName[]>] [<CommonParameters>]

如果需要有关如何使用命令的更多详细信息,请使用 Get-Help

help Get-Command -Full

语法部分Get-Help通过扩展参数的枚举值来提供更用户友好的显示。 它显示可以使用的实际值,以便更轻松地了解可用选项。

...
    Get-Command [[-Name] <System.String[]>] [[-ArgumentList]
    <System.Object[]>] [-All] [-CommandType {Alias | Function | Filter |
    Cmdlet | ExternalScript | Application | Script | Workflow |
    Configuration | All}] [-FullyQualifiedModule
    <Microsoft.PowerShell.Commands.ModuleSpecification[]>] [-ListImported]
    [-Module <System.String[]>] [-ParameterName <System.String[]>]
    [-ParameterType <System.Management.Automation.PSTypeName[]>]
    [-ShowCommandInfo] [-Syntax] [-TotalCount <System.Int32>]
    [<CommonParameters>]

    Get-Command [[-ArgumentList] <System.Object[]>] [-All]
    [-FullyQualifiedModule
    <Microsoft.PowerShell.Commands.ModuleSpecification[]>] [-ListImported]
    [-Module <System.String[]>] [-Noun <System.String[]>] [-ParameterName
    <System.String[]>] [-ParameterType
    <System.Management.Automation.PSTypeName[]>] [-ShowCommandInfo]
    [-Syntax] [-TotalCount <System.Int32>] [-Verb <System.String[]>]
    [<CommonParameters>]
...

帮助Get-Command的 PARAMETERS 部分显示 NameNounVerb 参数接受通配符。

...
    -Name <System.String[]>
        Specifies an array of names. This cmdlet gets only commands that
        have the specified name. Enter a name or name pattern. Wildcard
        characters are permitted.

        To get commands that have the same name, use the All parameter. When
        two commands have the same name, by default, `Get-Command` gets the
        command that runs when you type the command name.

        Required?                    false
        Position?                    0
        Default value                None
        Accept pipeline input?       True (ByPropertyName, ByValue)
        Accept wildcard characters?  true

    -Noun <System.String[]>
        Specifies an array of command nouns. This cmdlet gets commands,
        which include cmdlets, functions, and aliases, that have names that
        include the specified noun. Enter one or more nouns or noun
        patterns. Wildcard characters are permitted.

        Required?                    false
        Position?                    named
        Default value                None
        Accept pipeline input?       True (ByPropertyName)
        Accept wildcard characters?  true
    -Verb <System.String[]>
        Specifies an array of command verbs. This cmdlet gets commands,
        which include cmdlets, functions, and aliases, that have names that
        include the specified verb. Enter one or more verbs or verb
        patterns. Wildcard characters are permitted.

        Required?                    false
        Position?                    named
        Default value                None
        Accept pipeline input?       True (ByPropertyName)
        Accept wildcard characters?  true
...

以下示例将*通配符与 Name 参数Get-Command的值一起使用。

Get-Command -Name *service*

将通配符与 Name 参数Get-Command一起使用时,它将返回 PowerShell 命令和本机命令,如以下结果所示。


CommandType     Name                                               Version
-----------     ----                                               -------
Function        Get-NetFirewallServiceFilter                       2.0.0.0
Function        Set-NetFirewallServiceFilter                       2.0.0.0
Cmdlet          Get-Service                                        3.1.0.0
Cmdlet          New-Service                                        3.1.0.0
Cmdlet          New-WebServiceProxy                                3.1.0.0
Cmdlet          Restart-Service                                    3.1.0.0
Cmdlet          Resume-Service                                     3.1.0.0
Cmdlet          Set-Service                                        3.1.0.0
Cmdlet          Start-Service                                      3.1.0.0
Cmdlet          Stop-Service                                       3.1.0.0
Cmdlet          Suspend-Service                                    3.1.0.0
Application     SecurityHealthService.exe                          10.0.2...
Application     SensorDataService.exe                              10.0.2...
Application     services.exe                                       10.0.2...
Application     services.msc                                       0.0.0.0
Application     TieringEngineService.exe                           10.0.2...
Application     Windows.WARP.JITService.exe                        10.0.2...

可以使用 CommandType 参数将 PowerShell 命令的结果Get-Command限制为 PowerShell 命令。

Get-Command -Name *service* -CommandType Cmdlet, Function, Alias, Script

另一个选项可能是使用 VerbNoun 参数或两者,因为只有 PowerShell 命令具有谓词和名词。

以下示例用于 Get-Command 查找计算机上处理进程的命令。 使用 Noun 参数并指定Process为其值。

Get-Command -Noun Process
CommandType     Name                                               Version
-----------     ----                                               -------
Cmdlet          Debug-Process                                      3.1.0.0
Cmdlet          Get-Process                                        3.1.0.0
Cmdlet          Start-Process                                      3.1.0.0
Cmdlet          Stop-Process                                       3.1.0.0
Cmdlet          Wait-Process                                       3.1.0.0

总结

本章介绍了如何使用 Get-HelpGet-Command. 你还了解了如何使用帮助系统了解如何在找到命令后使用命令。 此外,你还了解了在新的帮助内容可用时如何更新计算机上的帮助系统。

审阅

  1. Get-Service 的 DisplayName 参数是否是按位置使用的参数
  2. Get-Process cmdlet 有多少个参数集?
  3. 存在哪些用于处理事件日志的 PowerShell 命令?
  4. 返回计算机上运行的 PowerShell 进程的列表的 PowerShell 命令是什么?
  5. 如何更新存储在计算机上的 PowerShell 帮助内容?

参考

若要详细了解本章中介绍的概念,请阅读以下 PowerShell 帮助文章。

后续步骤

在下一章中,你将了解对象、属性、方法和 Get-Member cmdlet。