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的数量。
|
|
在加载了多个大型模块(包括Az(Azure)和Microsoft.Graph模块)的PowerShell 7会话中,PowerShell显示有21,057个可用命令。
您可以使用Get-Command查找特定命令。例如,查看所有以-Process结尾的命令:
|
|
另一个示例是查找特定模块中的命令。假设您看到一个PowerShell脚本示例使用Microsoft.Graph模块(特别是New-MgUser cmdlet)在Microsoft Entra ID中创建用户。以下命令显示该cmdlet所在的模块(假设已安装Microsoft.Graph模块):
|
|
然后查找该模块中的所有其他命令:
|
|
要查找与更新用户或资源相关的所有cmdlet,使用通配符查找所有Set-*命令:
|
|
2. Get-Help
可以说是PowerShell中最重要的命令,Get-Help显示PowerShell中命令的帮助语法。最简单的方法是传递命令名称:
|
|
要查看有关特定参数的帮助信息,可以使用-Parameter选项:
|
|
您还可以查看cmdlet的使用演示:
|
|
如果要查看特定命令帮助中的所有内容,使用-Full参数:
|
|
3. Get-Process
单独使用时,Get-Process cmdlet显示系统上运行的所有进程列表。要计数,使用Measure-Object cmdlet:
|
|
通过传递进程名称检查特定进程。查看PowerShell 7进程的进程指标(如内存使用和CPU时间消耗):
|
|
Windows PowerShell用户运行以下命令:
|
|
将命令通过管道传递给Format-List以查看每个进程的属性和值:
|
|
Get-Process cmdlet还具有向默认输出添加有用信息的参数。例如,-IncludeUserName参数显示进程所有者(可能需要提升访问权限):
|
|
-FileVersionInfo参数获取进程可执行文件的版本,有助于验证系统上运行的是正确版本并进行故障排除:
|
|
4. Get-Service
Get-Service cmdlet类似于Get-Process cmdlet,但它显示服务——Windows中的一种后台进程。查看所有运行中的服务:
|
|
使用Measure-Object计数:
|
|
通过传递服务名称获取特定服务的信息:
|
|
要查看依赖于特定服务才能正常运行的服务,使用-DependentServices参数:
|
|
5. ConvertTo-Html
ConvertTo-Html cmdlet从PowerShell输出构建HTML文件。想象一下PowerShell中的标准表格输出,但以HTML格式呈现。使用此命令,将任何PowerShell输出通过管道传递给该命令,然后使用Out-File cmdlet将该输出通过管道传递给文件:
|
|
从PowerShell打开生成的文件:
|
|
使用-Property参数指定属性以生成更有针对性的HTML报告:
|
|
6. Get-ChildItem
Get-ChildItem cmdlet检索位置的内容,通常是文件文件夹的内容。但是,使用PowerShell驱动器中的导航功能,它可以显示其他数据存储,包括Windows注册表、证书存储甚至AD。
使用该命令返回当前位置的内容:
|
|
输出显示工作目录,即PowerShell安装文件夹。
您可以通过向-Path参数传递值来指定特定路径,而不是依赖于当前工作目录。以下示例通过指定HKLM:而不是驱动器字母来列出注册表路径:
|
|
Get-ChildItem具有许多强大的筛选选项。最有用的是-File和-Directory属性,分别仅显示文件和仅显示目录:
|
|
|
|
如果您在Windows PowerShell中使用这些命令,则没有屏幕截图中的着色功能。PowerShell开发人员在PowerShell 7.2中添加了对ANSI装饰文本的支持,可以通过$PSStyle变量进行控制。
7. Copy-Item
Copy-Item cmdlet将一个或多个文件复制到特定位置。该命令的最简单用法是提供源路径、文件名和目标路径。例如,将文件Data.txt从C:\Folder1复制到C:\Folder2:
|
|
成功完成不会向控制台输出任何内容。
您还可以使用通配符复制整个文件夹的内容:
|
|
或者递归复制整个文件夹:
|
|
8. Set-ExecutionPolicy
PowerShell使用执行策略来控制给定系统上执行哪些脚本。查看当前执行策略:
|
|
示例显示系统上的执行策略设置为RemoteSigned,这会阻止任何远程脚本运行,除非它们由受信任的证书签名。
您使用Set-ExecutionPolicy cmdlet通过传递所需的执行策略来更改执行策略。执行策略的名称为AllSigned、Bypass、Default、RemoteSigned、Restricted、Undefined和Unrestricted。如果要将执行策略设置为Unrestricted:
|
|
这需要在提升的上下文中执行脚本——在Windows上以管理员身份运行——如果成功则不返回任何输出。
9. Get-History
Get-History cmdlet检索当前会话中输入的命令列表。这比反复按向上箭头键查找先前执行的指令要容易得多。单独运行Get-History会返回当前会话中执行的所有操作列表:
|
|
要控制行数,使用-Count参数。查看最近五行:
|
|
10. Get-Content
有时在控制台中读取文件而不是使用像Notepad这样的应用程序很有用。Get-Content cmdlet检索文件的数据。例如,如果要读取Windows上的hosts文件:
|
|
Get-Content可以监视文件的更改(如日志文件),并在写入时输出这些行。-Wait参数使命令保持运行,直到用户终止:
|
|
以下示例中,-Tail参数显示文件的最后10行:
|
|
11. Out-File
Out-File cmdlet将PowerShell输出写入文件。将想要输出的数据通过管道传递给Out-File,并给出文件路径。如果要创建包含系统服务列表的文件C:\Temp\services.txt:
|
|
由于Out-File隐式使用PowerShell的格式化系统,文件看起来与运行Get-Service然后将终端输出复制到文件相同。
如果要将数据追加到现有文件的末尾,可以使用-Append参数:
|
|
12. Invoke-Item
Invoke-Item cmdlet使用与文件扩展名关联的应用程序打开或执行文件。例如,对HTM文件使用Invoke-Item cmdlet通常会导致文件在Web浏览器中打开:
|
|
类似地,对.docx文件使用Invoke-Item会在Microsoft Word中打开它:
|
|
向管理武器库添加更多PowerShell命令
本文演示的所有命令都是Windows PowerShell 5.1和PowerShell 7默认安装的一部分。要获得更多功能或与服务集成,您需要安装其他模块。例如,要管理Entra ID中的用户,使用以下命令安装Microsoft.Graph.Users模块:
|
|
接下来,使用Import-Module将模块加载到当前PowerShell会话中:
|
|
使用Get-Module查看有关模块的信息:
|
|
然后,使用Get-Command查看模块附带的命令:
|
|
Anthony Howell是一位IT战略家,在基础设施和自动化技术方面拥有丰富经验。他的专业知识包括PowerShell、DevOps、云计算以及在Windows和Linux环境中工作。
Brien Posey是前22次Microsoft MVP和商业宇航员候选人。在他超过30年的IT生涯中,他曾担任美国国防部的首席网络工程师和美国一些最大保险公司的网络管理员。