1、说明
PowerShell 预安装了大量命令。 若要有效地使用 PowerShell 命令,您需要了解它们的工作原理。 例如,你需要知道命令所采用的参数,以及可以使用多种方法来调用命令。
它还有助于了解命令返回的内容、返回的类型以及命令的属性。 通过了解这些事项,你可以配置如何显示帮助。 此外,还会显示一条提示,指出如果将特定命令与另一个命令结合使用,这两个命令如何匹配。
2、使用帮助系统发现命令
通过使用 PowerShell 中的内置帮助系统,可以了解有关特定命令的详细信息。 使用 Get-Command
cmdlet 可查找所需的命令。 找到命令后,你可能想要了解有关该命令的作用以及各种调用方法的详细信息。
2.1、使用帮助系统和 Get-help 发现 cmdlet
可使用 Get-Help
核心 cmdlet 来了解有关所选命令的详细信息。 通常,可通过按名称指定 Get-Help
并添加 -Name
标志(其中包含你想要了解的 cmdlet 的名称)来调用它。 下面是一个示例:
PowerShell复制
Get-Help -Name Get-Help
2.2、更新帮助
默认情况下,PowerShell 的新版本不包含帮助系统。 首次运行 Get-Help
时,系统会要求安装帮助文件。 你还可运行 Update-Help
cmdlet 以安装帮助文件。 由于对 Update-Help
的调用会下载多个帮助文件,因此默认情况下,该命令每日只能提取一次。 可使用 -Force
标志重写此提取行为。
与 Linux 或 macOS 相比,在 Windows 上更新帮助文件的方式不同。 运行 Update-Help
cmdlet 时,此过程将匹配计算机的区域性,以通过 Internet 获取帮助文件。 在 Windows 上,已经安装了一个区域性,但它在 Linux 和 macOS 上会丢失。 因此,在 Linux 和 macOS 上更新帮助文件时,需要指定一个区域性。
下面是一个示例命令:
PowerShell复制
Update-Help -UICulture en-US -Verbose
此命令指定 -UICulture
标志。 它为该标志提供值 en-US
,这将提取英语帮助文件。 若要在 macOS 或 Linux 上更新帮助文件,请使用与你计算机的区域性相对应的区域性。
2.3、探索帮助部分
调用 cmdlet 上的 Get-Help
时,将返回帮助页。 此页面包含许多部分。 你可能会看到以下常见部分:
- NAME:提供命令的名称。
- SYNTAX:介绍如何通过使用标志组合(有时还可使用允许的参数)来调用命令。
- ALIASES:列出了命令的所有别名。 别名是命令的不同名称,可用于调用命令。
- REMARKS:提供有关要运行的命令的信息,以获取有关此命令的更多帮助。
- PARAMETERS:提供有关参数的详细信息。 包括参数的类型、较长的说明和可接受的值(如果适用)。
2.4、筛选帮助响应
如果不想显示完整的帮助页面,可向 Get-Help
命令添加标志,以缩小响应范围。 下面是可以使用的一些标志:
- Full:返回详细的帮助页面。 它指定了无法从标准响应中获取的参数、输入和输出等信息。
- Detailed:返回与标准响应类似、但包含参数部分的响应。
- Examples:仅返回示例(如果存在)。
- Online:为命令打开一个网页。
- Parameter:需要形参名称作为实参。 它列出特定参数的属性。
例如,可使用以下命令仅返回帮助页的“示例”部分。
PowerShell复制
Get-Help Get-FileHash -Examples
2.5、提升阅读体验
运行 Get-Help
命令将返回整个帮助页。 此页可能无法提供最佳阅读体验。 你可能必须滚动查找要阅读的部分。 更好的方法是使用 help
别名。 help
别名可将 Get-Help
传递到函数,确保输出逐行可读。 它还通过对输出进行分页,使响应逐页可读。 在下一个单元中使用别名 help
。
3、发现对象
运行 cmdlet 运行时,将返回一个对象。 调用 cmdlet 时,所看到的响应已被格式化,并可能不一定表示响应的所有可用信息。 若要详细了解正在返回的内容以及如何修改返回的内容,可以使用命令 Get-Member
。
3.1、使用 Get-Member 发现对象
Get-Member
cmdlet 将基于命令进行传递,以便可以筛选输出。 Get-Member
的典型命令行调用如以下示例所示:
PowerShell复制
Get-Process -Name 'name-of-process' | Get-Member
此命令首先通过调用 Get-Process
生成对象结果。 该结果通过使用管道 (|
) 作为输入传递给 Get-Member
。 在返回结果中,你将获得一个表,其中包含 Name
、MemberType
和 Definition
列。 你还会获得返回对象的类型。
提示
若要获取计算机上运行的进程列表,请运行 Get-Process
。
3.2、按类型搜索
运行 Get-Member
命令时响应的第一行是返回对象的类型。 知道类型后,可搜索对同一类型运行的其他 cmdlet。 浏览这些相关命令,快速了解你所使用的域。
假设你调用了 PowerShell 命令来列出特定进程的所有成员。 结果的前几行看起来类似于以下输出:
输出复制
TypeName: System.Diagnostics.Process
Name MemberType Definition
---- ---------- ----------
Handles AliasProperty Handles = Handlecount
第一行指示类型为 System.Diagnostics.Process
。 使用此类型作为搜索参数,查找使用此类型的其他 cmdlet。 下面是一个示例命令:
PowerShell复制
Get-Command -ParameterType Process
结果是在此类型上操作的 cmdlet 列表。 通过使用 Get-Member
并学着解释其结果,你就慢慢了解 PowerShell 了。
提示
PowerShell 只需一次了解一点就可以了。 发现相关 cmdlet 的一个好方法是使用返回的类型按类型搜索 cmdlet。
3.3、使用 Select-Object 筛选 Get-Member 结果
运行 Get-Member
时,结果是详细的。 也就是说,会返回很多行。 对象可能包括事件和方法等属性。 若要使答案更简洁,可以筛选特定列,还可决定要显示的列。 请记住,返回的答案已是响应中所有列的子集。
查看包含许多列的 Get-Member
响应。 通过引入 cmdlet Select-Object
,你可以选择在响应中显示哪些列。 此命令需要一个逗号分隔的列名称列表或一个指示所有列的通配符(如星号 *
)。
在 Select-Object Name, MemberType
上下文中使用 Select-Object
命令时,只需指定所需的列。 在此例中,列为 Name
和 MemberType
。 命令行如下所示:
PowerShell复制
Get-Process -Name 'name-of-process' | Get-Member | Select-Object Name, MemberType
此筛选模式返回的输出包含的列较少。 下面是结果示例:
输出复制
Name MemberType
---- ----------
Handles AliasProperty
还可按行筛选响应。 例如,可使用标志 -MemberType Method
来指定你对成员类型为方法的行感兴趣。 你可能只希望显示特定的行,例如,要查找并运行特定方法。