必知必会的12个PowerShell命令及速查指南

本文详细介绍了12个最常用的PowerShell命令,包括Get-Command、Get-Help、Get-Process等,并提供了使用示例和技巧,帮助IT管理员提升系统管理和自动化效率。

12个必知的PowerShell命令及速查指南

PowerShell包含数千个cmdlet,其用途因使用场景而异。虽然许多cmdlet可能较为冷门,但您会发现其中一些会反复使用,特别是对于编写PowerShell脚本或执行各种自动化任务的用户。

12个必备的PowerShell cmdlet

以下列出了管理员广泛使用的12个PowerShell cmdlet,这些命令在Windows PowerShell 5.1和PowerShell 7中均可用,版本差异已突出显示。

1. Get-Command

Get-Command cmdlet执行命令发现。使用各种参数,它可以列出当前可用的所有命令、特定模块的命令,甚至匹配筛选器的命令。由于PowerShell包含数千个cmdlet,此命令尤为有用。

无参数运行Get-Command会生成当前会话中所有可用命令的长列表。通过管道将Get-Command传递给Measure-Object cmdlet可以获取可用cmdlet的数量。

1
Get-Command | Measure-Object

在加载了多个大型模块(包括Az(Azure)和Microsoft.Graph模块)的PowerShell 7会话中,PowerShell显示有21,057个可用命令。

您可以使用Get-Command查找特定命令。例如,查看所有以-Process结尾的命令:

1
Get-Command *-Process | ft -a

另一个示例是查找特定模块中的命令。假设您看到一个PowerShell脚本示例使用Microsoft.Graph模块(特别是New-MgUser cmdlet)在Microsoft Entra ID中创建用户。以下命令显示该cmdlet所在的模块(假设已安装Microsoft.Graph模块):

1
Get-Command New-MgUser | ft -a

然后查找该模块中的所有其他命令:

1
Get-Command -Module Microsoft.Graph.Users

要查找与更新用户或资源相关的所有cmdlet,使用通配符查找所有Set-*命令:

1
Get-Command Set-* -Module Microsoft.Graph.Users

2. Get-Help

可以说是PowerShell中最重要的命令,Get-Help显示PowerShell中命令的帮助语法。最简单的方法是传递命令名称:

1
Get-Help Get-Command

要查看有关特定参数的帮助信息,可以使用-Parameter选项:

1
Get-Help Get-Command -Parameter Module

您还可以查看cmdlet的使用演示:

1
Get-Help Get-Command -Examples

如果要查看特定命令帮助中的所有内容,使用-Full参数:

1
Get-Help Get-Command -Full

3. Get-Process

单独使用时,Get-Process cmdlet显示系统上运行的所有进程列表。要计数,使用Measure-Object cmdlet:

1
Get-Process | Measure-Object

通过传递进程名称检查特定进程。查看PowerShell 7进程的进程指标(如内存使用和CPU时间消耗):

1
Get-Process pwsh

Windows PowerShell用户运行以下命令:

1
Get-Process powershell

将命令通过管道传递给Format-List以查看每个进程的属性和值:

1
Get-Process pwsh | Format-List *

Get-Process cmdlet还具有向默认输出添加有用信息的参数。例如,-IncludeUserName参数显示进程所有者(可能需要提升访问权限):

1
Get-Process pwsh -IncludeUserName

-FileVersionInfo参数获取进程可执行文件的版本,有助于验证系统上运行的是正确版本并进行故障排除:

1
Get-Process pwsh -FileVersionInfo

4. Get-Service

Get-Service cmdlet类似于Get-Process cmdlet,但它显示服务——Windows中的一种后台进程。查看所有运行中的服务:

1
Get-Service

使用Measure-Object计数:

1
Get-Service | Measure-Object

通过传递服务名称获取特定服务的信息:

1
Get-Service spooler

要查看依赖于特定服务才能正常运行的服务,使用-DependentServices参数:

1
Get-Service Dnscache -DependentServices

5. ConvertTo-Html

ConvertTo-Html cmdlet从PowerShell输出构建HTML文件。想象一下PowerShell中的标准表格输出,但以HTML格式呈现。使用此命令,将任何PowerShell输出通过管道传递给该命令,然后使用Out-File cmdlet将该输出通过管道传递给文件:

1
Get-Process pwsh -FileVersionInfo | ConvertTo-Html | Out-File C:\tmp\process.html

从PowerShell打开生成的文件:

1
Invoke-Item C:\tmp\process.html

使用-Property参数指定属性以生成更有针对性的HTML报告:

1
Get-Process pwsh -FileVersionInfo | ConvertTo-Html -Property ProductVersion,FileVersion,FileName | Out-File C:\tmp\process.html

6. Get-ChildItem

Get-ChildItem cmdlet检索位置的内容,通常是文件文件夹的内容。但是,使用PowerShell驱动器中的导航功能,它可以显示其他数据存储,包括Windows注册表、证书存储甚至AD。

使用该命令返回当前位置的内容:

1
Get-ChildItem

输出显示工作目录,即PowerShell安装文件夹。

您可以通过向-Path参数传递值来指定特定路径,而不是依赖于当前工作目录。以下示例通过指定HKLM:而不是驱动器字母来列出注册表路径:

1
Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\PowerShellCore'

Get-ChildItem具有许多强大的筛选选项。最有用的是-File和-Directory属性,分别仅显示文件和仅显示目录:

1
Get-ChildItem -File
1
Get-ChildItem -Directory

如果您在Windows PowerShell中使用这些命令,则没有屏幕截图中的着色功能。PowerShell开发人员在PowerShell 7.2中添加了对ANSI装饰文本的支持,可以通过$PSStyle变量进行控制。

7. Copy-Item

Copy-Item cmdlet将一个或多个文件复制到特定位置。该命令的最简单用法是提供源路径、文件名和目标路径。例如,将文件Data.txt从C:\Folder1复制到C:\Folder2:

1
Copy-Item C:\Folder1\Data.txt -Destination C:\Folder2

成功完成不会向控制台输出任何内容。

您还可以使用通配符复制整个文件夹的内容:

1
Copy-Item C:\Folder1\*.* -Destination C:\Folder2

或者递归复制整个文件夹:

1
Copy-Item C:\Folder1 -Destination C:\Folder2 -Recurse

8. Set-ExecutionPolicy

PowerShell使用执行策略来控制给定系统上执行哪些脚本。查看当前执行策略:

1
Get-ExecutionPolicy

示例显示系统上的执行策略设置为RemoteSigned,这会阻止任何远程脚本运行,除非它们由受信任的证书签名。

您使用Set-ExecutionPolicy cmdlet通过传递所需的执行策略来更改执行策略。执行策略的名称为AllSigned、Bypass、Default、RemoteSigned、Restricted、Undefined和Unrestricted。如果要将执行策略设置为Unrestricted:

1
Set-ExecutionPolicy Unrestricted

这需要在提升的上下文中执行脚本——在Windows上以管理员身份运行——如果成功则不返回任何输出。

9. Get-History

Get-History cmdlet检索当前会话中输入的命令列表。这比反复按向上箭头键查找先前执行的指令要容易得多。单独运行Get-History会返回当前会话中执行的所有操作列表:

1
Get-History

要控制行数,使用-Count参数。查看最近五行:

1
Get-History -Count 5

10. Get-Content

有时在控制台中读取文件而不是使用像Notepad这样的应用程序很有用。Get-Content cmdlet检索文件的数据。例如,如果要读取Windows上的hosts文件:

1
Get-Content -Path C:\Windows\System32\drivers\etc\hosts

Get-Content可以监视文件的更改(如日志文件),并在写入时输出这些行。-Wait参数使命令保持运行,直到用户终止:

1
Get-Content C:\tmp\log.txt -Wait

以下示例中,-Tail参数显示文件的最后10行:

1
Get-Content C:\tmp\log.txt -Tail 10

11. Out-File

Out-File cmdlet将PowerShell输出写入文件。将想要输出的数据通过管道传递给Out-File,并给出文件路径。如果要创建包含系统服务列表的文件C:\Temp\services.txt:

1
Get-Service | Out-File -FilePath C:\Temp\services.txt

由于Out-File隐式使用PowerShell的格式化系统,文件看起来与运行Get-Service然后将终端输出复制到文件相同。

如果要将数据追加到现有文件的末尾,可以使用-Append参数:

1
Get-Service | Out-File -FilePath C:\Temp\Services.txt -Append

12. Invoke-Item

Invoke-Item cmdlet使用与文件扩展名关联的应用程序打开或执行文件。例如,对HTM文件使用Invoke-Item cmdlet通常会导致文件在Web浏览器中打开:

1
Invoke-Item C:\tmp\process.htm

类似地,对.docx文件使用Invoke-Item会在Microsoft Word中打开它:

1
Invoke-Item C:\tmp\Document1.docx

向管理武器库添加更多PowerShell命令

本文演示的所有命令都是Windows PowerShell 5.1和PowerShell 7默认安装的一部分。要获得更多功能或与服务集成,您需要安装其他模块。例如,要管理Entra ID中的用户,使用以下命令安装Microsoft.Graph.Users模块:

1
Install-Module Microsoft.Graph.Users

接下来,使用Import-Module将模块加载到当前PowerShell会话中:

1
Import-Module Microsoft.Graph.Users

使用Get-Module查看有关模块的信息:

1
Get-Module Microsoft.Graph.Users

然后,使用Get-Command查看模块附带的命令:

1
Get-Command -Module Microsoft.Graph.Users

Anthony Howell是一位IT战略家,在基础设施和自动化技术方面拥有丰富经验。他的专业知识包括PowerShell、DevOps、云计算以及在Windows和Linux环境中工作。

Brien Posey是前22次Microsoft MVP和商业宇航员候选人。在他超过30年的IT生涯中,他曾担任美国国防部的首席网络工程师和美国一些最大保险公司的网络管理员。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计