发现 PowerShell

PowerShell 是一种命令行 shell 和一种脚本语言。 PowerShell 在 Windows 上启动,可帮助自动执行管理任务。 现在,它跨平台运行,可用于各种任务。

使 PowerShell 唯一的是它接受并返回 .NET 对象,而不是文本。 使用此功能可以更轻松地连接 管道中的不同命令。

可以使用哪些 PowerShell?

最初,PowerShell 是仅限 Windows 的。 现在,它是跨平台的,可用于各种任务,例如:

  • 云管理。 PowerShell 可用于管理云资源。 例如,可以检索信息、更新或部署新资源。
  • CI/CD。 它还可用作持续集成/持续部署管道的一部分。
  • 自动执行 Active Directory 和 Exchange 的任务。 你可以使用它自动执行 Windows 上几乎任何任务,例如在 Active Directory 中创建用户和 Exchange 中的邮箱。

谁使用 PowerShell?

PowerShell 是一种功能强大的工具,可帮助从事多种角色的人员。 传统上,系统管理员使用 PowerShell。 现在,人们称自己为 DevOps、Cloud Ops,甚至开发人员正在使用它。

PowerShell cmdlet

PowerShell 附带数百个预安装的命令。 PowerShell 命令称为 cmdlet(发音的 命令允许)。

每个 cmdlet 的名称由 Verb-Noun 对组成。 例如,Get-Process。 通过此命名约定,可以更轻松地了解 cmdlet 的作用。 此外,还可以更轻松地查找要查找的命令。 查找要使用的 cmdlet 时,可以筛选谓词或名词。

使用 cmdlet 浏览 PowerShell

当你第一次拿起 PowerShell 时,它可能会感到令人生畏,因为似乎有很多东西要学习。 PowerShell 旨在帮助你一次学习,因为你需要它。

PowerShell 包含可帮助发现 PowerShell 的 cmdlet。 使用这三个 cmdlet,可以发现可用的命令、它们执行的作以及它们所作的类型。

  • Get-Verb。 运行此命令将返回大多数命令所遵循的谓词列表。 响应包括这些谓词执行的作的说明。 由于大多数命令都遵循此命名约定,因此它会设定命令的作用预期。 此命令可帮助你选择适当的谓词以及创建自己的命令时要命名的命令。
  • Get-Command。 此命令检索计算机上安装的所有命令的列表。
  • Get-Member。 它基于对象的输出进行作,能够发现哪些对象、属性和方法可用于命令。
  • Get-Help。 以命令名称作为参数调用此命令将显示描述命令的各个部分的帮助页。

使用这些命令,几乎可以发现有关 PowerShell 所需的任何内容。

动词

谓词 是 PowerShell 中的重要概念。 这是大多数 cmdlet 遵循的命名标准。 这也是编写自己的命令时应遵循的命名标准。 想法是 动词 说你要执行的作,比如读取或更改数据。 PowerShell 具有标准化的谓词列表。 若要获取所有可能谓词的完整列表,请使用 Get-Verb cmdlet:

Get-Verb

该 cmdlet 返回一长串谓词。 说明提供了谓词要执行的作的上下文。 下面是前几行输出:

Verb    AliasPrefix   Group     Description
----    -----------   -----     -----------
Add     a             Common    Adds a resource to a container, or attaches an item to another item
Clear   cl            Common    Removes all the resources from a container but does not delete the container
Close   cs            Common    Changes the state of a resource to make it inaccessible, unavailable, or unusab…
Copy    cp            Common    Copies a resource to another name or to another container
Enter   et            Common    Specifies an action that allows the user to move into a resource
Exit    ex            Common    Sets the current environment or context to the most recently used context
...

使用 Get-Command 查找命令

Get-Command cmdlet 返回系统上安装的所有可用命令的列表。 列表可能很大。 可以使用参数或帮助程序 cmdlet 筛选响应来限制返回的信息量。

按名称进行筛选

可以使用不同的参数筛选输出 Get-Command 。 通过筛选,可以查找具有特定属性的命令。 Name 参数允许按名称查找特定命令。

Get-Command -Name Get-Process
CommandType     Name              Version    Source
-----------     ----              -------    ------
Cmdlet          Get-Process       7.0.0.0    Microsoft.PowerShell.Management

如果要查找使用进程的所有命令,该怎么办? 可以使用通配符 * 来匹配其他类型的字符串。 例如:

Get-Command -Name *-Process
CommandType     Name              Version    Source
-----------     ----              -------    ------
Cmdlet          Debug-Process     7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Get-Process       7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Start-Process     7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Stop-Process      7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Wait-Process      7.0.0.0    Microsoft.PowerShell.Management

对名词和谓词进行筛选

还有其他参数可以筛选谓词和名词值。 命令名称的谓词部分是最左侧的部分。 谓词应该是 cmdlet 返回 Get-Verb 的值之一。 命令的最右侧部分是名词部分。 名词可以是任何东西。

  • 根据谓词进行筛选。 在命令 Get-Process中,谓词部分为 Get. 若要筛选谓词部分,请使用 Verb 参数。

    Get-Command -Verb 'Get'
    

    此示例列出使用谓词 Get的所有命令。

  • 筛选名词。 在命令 Get-Process中,名词部分为 Process。 若要筛选名词,请使用 名词 参数。 下面的示例返回以字母 U开头具有名词的所有 cmdlet。

    Get-Command -Noun U*
    

此外,还可以合并参数以缩小搜索范围,例如:

Get-Command -Verb Get -Noun U*
CommandType     Name                         Version    Source
-----------     ----                         -------    ------
Cmdlet          Get-UICulture                7.0.0.0    Microsoft.PowerShell.Utility
Cmdlet          Get-Unique                   7.0.0.0    Microsoft.PowerShell.Utility
Cmdlet          Get-Uptime                   7.0.0.0    Microsoft.PowerShell.Utility

使用帮助程序 cmdlet 筛选结果

还可以使用其他 cmdlet 筛选结果。

  • Select-Object。 此通用命令可帮助你从一个或多个对象中选择特定属性。 还可以限制返回的项目数。 以下示例返回当前会话中前 5 个可用命令的名称和属性值。

    Get-Command | Select-Object -First 5 -Property Name, Source
    
    Name                      Source
    ----                      ------
    Add-AppPackage            Appx
    Add-AppPackageVolume      Appx
    Add-AppProvisionedPackage Dism
    Add-AssertionOperator     Pester
    Add-ProvisionedAppPackage Dism
    

    有关详细信息,请参阅 Select-Object

  • Where-Object。 通过此 cmdlet,可以基于属性的值筛选返回的对象。 该命令采用一个表达式,该表达式可以测试属性的值。 以下示例返回以 <a0/> 开头的所有进程。

    Get-Process | Where-Object {$_.ProcessName -like "p*"}
    

    Get-Process cmdlet 返回进程对象的集合。 若要筛选响应,请 通过管道 将输出 Where-Object传递给 。 管道意味着两个或多个命令通过管道 | 字符进行连接。 一个命令的输出作为下一命令的输入发送。 用于使用-like运算符的筛选器表达式Where-Object匹配以字母p开头的进程。

使用 Get-Member 浏览对象

找到所需的 cmdlet 后,想要详细了解它生成的输出。 该 Get-Member cmdlet 显示对象的类型、属性和方法。 通过管道将要检查的 Get-Member输出传递给 。

Get-Process | Get-Member

结果将显示返回的类型 TypeName 以及对象的所有属性和方法。 下面是此类结果的摘录:

TypeName: System.Diagnostics.Process

Name        MemberType     Definition
----        ----------     ----------
Handles     AliasProperty  Handles = Handlecount
Name        AliasProperty  Name = ProcessName
...

使用 MemberType 参数可以限制返回的信息。

Get-Process | Get-Member -MemberType Method

默认情况下,PowerShell 仅显示几个属性。 上一个示例显示了NameMemberTypeDefinition成员。 可用于 Select-Object 指定要查看的属性。 例如,你想要仅 Name 显示和 Definition 属性:

Get-Process | Get-Member | Select-Object Name, Definition

按参数类型搜索

Get-Member 显示返回 Get-ProcessProcess 类型对象。 ParameterType 参数Get-Command可用于查找将 Process 对象作为输入的其他命令。

Get-Command -ParameterType Process
CommandType     Name                         Version    Source
-----------     ----                         -------    ------
Cmdlet          Debug-Process                7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Enter-PSHostProcess          7.1.0.0    Microsoft.PowerShell.Core
Cmdlet          Get-Process                  7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Get-PSHostProcessInfo        7.1.0.0    Microsoft.PowerShell.Core
Cmdlet          Stop-Process                 7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Wait-Process                 7.0.0.0    Microsoft.PowerShell.Managem…

了解命令的输出类型有助于缩小搜索相关命令的范围。

其他资源