通过合理运用 PowerShell 命令,您可以高效且精确地管理您的系统资源。PowerShell 是一个强大的自动化工具和脚本环境,自 Windows 7
开始即作为标准组件预装在所有版本的 Windows 操作系统中。它不仅提供了对传统命令行界面(cmd
)命令的支持,还引入了丰富的、专为管理 Windows 系统设计的命令集 cmdlet
。这些 cmdlet
遵循一种命名约定,即由动词-名词的组合形式构成,使得命令易于记忆和理解。此外,用户可以通过添加可选参数来进一步定制每个命令的行为,从而满足特定的需求。
什么是 PowerShell 命令
PowerShell 命令是用于指示 PowerShell 执行特定操作的指令。这些命令可以是简单的操作,如文件浏览,也可以是复杂的任务,如服务管理和注册表编辑。与传统的命令行工具相比,PowerShell 提供了一个更加丰富和灵活的命令集。每个 cmdlet 都旨在完成一项具体的功能,并且可以与其他 cmdlet
结合使用,以实现复杂的工作流程。这使得 PowerShell 成为了系统管理员、IT 专业人员乃至开发者的强大工具。
常用 PowerShell 命令概览
对于刚开始接触 PowerShell 的用户来说,了解一些核心命令是非常有帮助的。下面列出了几类重要的 PowerShell命令,它们覆盖了从基础的系统信息查询到高级的服务管理等多个方面。
Get-Module -All
要获取所有导入的 PowerShell 模块的初步概览,请使用命令 Get-Module -All
。
Get-Command
有大量预定义的 PowerShell 命令。要获取当前可用的 PowerShell 命令的概览,只需使用 Get-Command
命令。此命令将整齐地列出所有可能的操作,并为每个相应的 cmdlet 提供简明说明。即使您安装了其他模块,这也适用。
Get-Help
上面描述的 Get-Command
列表提供了初步概览;要了解有关命令及其选项的更多详细信息,请使用 Get-Help
cmdlet。此命令访问您 PC 上的帮助文件,然后提供所有可用信息。要激活它,请将 Get-Help
与要查看其语法的命令结合使用。
Get-Help [[-Name] <String>] [-Path <String>] [-Category <String[]>] [-Component <String[]>] [-Functionality <String[]>] [-Role <String[]>] [-Examples] [<CommonParameters>]
Get-Process
要快速检查系统上当前活动的应用程序、程序和进程列表,可以使用 Get-Process
命令。如果指定特定应用程序,您将收到有关该特定应用程序的其他信息。
Get-Service
Get-Service
命令的功能与 Get-Process cmdlet
类似。但是,它通过提供有关所有活动服务的信息而与众不同。如果您希望获取有关特定服务或特定类别服务的信息,您可以轻松指定您的请求。
Stop-Process
您还可以使用各种 PowerShell 命令通过 shell 停止进程。其中一个选项是 Stop-Process
命令。您可以通过名称
、ID
或其他属性定义相应的进程。以下是示例:
Stop-Process -Name "processname"
Stop-Process -Id 3582 -Confirm -PassThru
使用 -Confirm
请求确认命令。-PassThru
命令请求确认已停止的进程。这不是自动完成的。
ConvertTo-HTML
为了快速识别问题或潜在的并发症,清晰的显示非常有益。您可以通过使用 ConvertTo-HTML
命令来实现这一点,该命令将 PowerShell 命令的输出转换为 HTML 文件。这以用户友好的列格式呈现信息。命令结构通常如下所示:
Get-Command | ConvertTo-Html > c:\temp\AllCommands.html
ConvertTo-Xml
如果您需要特定对象的基于 XML 的表示,则可以采用类似的方式进行。您可以使用 ConvertTo-Xml
命令执行此操作。在以下示例中,您将当前日期转换为 XML 格式:
Get-Date | ConvertTo-Xml
Where-Object
您可以使用 Where-Object
命令过滤 cmdlet 的结果。执行命令时,您经常会收到包含比您需要的更多信息的大量对象。通过将 Where-Object
与管道结合使用,您可以仅显示您正在寻找的特定信息。例如,如果您想查看今年创建或更新的服务,您可以按如下方式进行:
Get-Service | Where-Object { $_.LastWriteTime -gt "01.01.2023" }
Get-History
要列出您在会话期间输入的所有 PowerShell 命令,Get-History
是正确的 cmdlet,要列出所有 PowerShell 命令,使用此规范,您只能调用最后十个 PowerShell 命令。
Get-History -Count 10
Clear-History
您还可以删除使用的 PowerShell 命令列表。要删除所有条目,请使用 cmdlet Clear-History
要删除选定的 PowerShell 命令,只需添加相应的参数。以下输入将删除所有包含“Help
”或以“Syntax
”结尾的 PowerShell 命令。
Clear-History -Command *Help*, *Syntax
Add-History
还可以将 PowerShell 命令添加到会话中。这样,您以后就可以再次调用它们。相应的 cmdlet 是 Add-History
。
Out-File
要将 PowerShell 命令的输出保存在您的计算机上,请使用 Out-File
cmdlet。这会将 PowerShell 命令存储在指定路径下的原始文本文件中。
Get-Process | Out-File -FilePath .\Process.txt
Copy-Item
在 PowerShell 中,您还可以复制元素并将副本保存在其他位置。使用 Copy-Item
命令并指定要保存副本的目录。其工作原理如下:
Copy-Item "C:\folder1\file.txt" -Destination "C:\folder2"
Get-ChildItem
您可以使用 Get-ChildItem
命令从一个或多个存储位置获取项目。如果有子元素,它们也会显示出来。此命令默认列出属性、上次更改的时间戳、文件大小和元素名称。如果存储位置为空,则省略输出。
Get-ChildItem -Path C:\example
属性显示在“Mode
”行下方。以下属性很常见:
a(存档)
、d(目录)
、h(隐藏)
、l(链接)
、r(只读)
、s(系统)
Set-AuthenticodeSignature
要保护您的文件,您可以使用 Set-AuthenticodeSignature
命令为它们配备 Authenticode
签名。但是,这仅适用于支持主题接口包 (SIP) 的文件。
$cert=Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
Set-AuthenticodeSignature -FilePath PsTestInternet2.ps1 -Certificate $cert
Invoke-Item
要执行与特定文件相关的标准操作,Invoke-Item
提供了最简单的方法。例如,此命令可确保直接执行可执行文件或在默认应用程序中打开文档文件。在此示例中,默认情况下在 Microsoft Word 中打开该文件:
Invoke-Item "C:\Test\example.doc"
Start-Job
要启动本地计算机上的后台作业,您可以使用适当的命令来实现此目的。Start-Job
允许您在后台执行特定命令,而无需与当前会话交互。
Start-Job -ScriptBlock { Get-Process -Name pwsh }
使用这些 PowerShell 命令执行操作
虽然早期的 PowerShell 命令主要侧重于提供概述,但您也可以使用适当的 cmdlet 执行各种操作,从而提高系统的生产力。以下 PowerShell 命令简化了您的工作流程。
Clear-Content
要删除元素的内容同时保留元素本身,Clear-Content
命令是理想的选择。它的一个使用示例是清除文档中的文本,同时保持实际文件完好无损。该过程执行如下:
Clear-Content C:\Temp\example.txt
ForEach-Object
ForEach-Object
命令允许您对输入对象集合中的所有元素执行操作。在此示例中,我们将数组中的三个整数除以 10:
10000, 1000, 100 | ForEach-Object -Process {$_/10}
1000
100
10
Compare-Object
为了避免手动比较不同的对象集,您可以使用 Compare-Object
cmdlet。此命令会生成一份报告,突出显示记录之间的区别。第一条记录用作参考对象,第二条记录用作差异对象。您可以指定要比较的因素,如果省略此信息,则只会比较字符串结果。输出分为仅出现在参考对象中的属性 (<==) 和仅出现在差异对象中的属性 (==>)。在此示例中,document1.txt
包含值 Berlin
、London
和 Paris
。Document2.txt
包含 Berlin
、Vienna
和 Amsterdam
。
Compare-Object -ReferenceObject (Get-Content -Path C:\Test\Document1.txt) -DifferenceObject (Get-Content -Path C:\Test\Document2.txt)
InputObject SideIndicator
----------- -----------------
Wien ==>
Amsterdam ==>
London <==
Paris <==
默认情况下,不会显示出现在两个文档中的内容(在本例中为“Berlin
”)。
New-Object
最有用的 PowerShell 命令之一是 New-Object
。您可以使用此 cmdlet 从 .NET 框架或组件对象模型 (1.2.3.4
”作为构造函数字符串的 System.Version 对象,则命令的执行方式如下:
New-Object -TypeName System.Version -ArgumentList "1.2.3.4"
Select-Object
使用 Select-Object
命令选择具有您定义的属性的对象或对象组。您可以为此指定的参数如下:
First
Last
Unique
Skip
Index
在下面的示例中,我们使用 PowerShell 命令 Get-Process
和 Sort-Object
显示输入时内存消耗最高的三个进程。
Get-Process | Sort-Object -Property WS | Select-Object -Last 3
Set-Alias
Windows 快捷方式有助于更快地执行操作。PowerShell 也提供此选项。您可以使用 Set-Alias
cmdlet 为不同的 PowerShell 命令定义快捷方式。在下面的示例中,我们为当前会话的 Get-ChildItem
命令创建别名“ci
”。
PS> Set-Alias -Name ci -Value Get-ChildItem
PS> Get-Alias -Name ci
Set-Location
要更改工作内存位置,请使用 Set-Location
命令。可能的新位置是目录、子目录、注册表位置或提供程序路径。在以下示例中,我们将 C: 驱动器指定为当前存储位置:
PS C:\Windows\> Set-Location HKLM:\
PS HKLM:\> Set-Location C:
PS C:\Windows\>
Set-Service
您可以使用 Set-Service
cmdlet 与服务交互并启动、停止或暂停服务。还可以更改服务的属性。在以下示例中,我们将服务的显示名称从“新工作站
”更改为“旧工作站
”。
Set-Service -Name New Workstation -DisplayName "Old Workstation"
Set-TimeZone
要更改系统的时区,Set-TimeZone
命令是正确的选择。要将协调世界时设置为新系统时间,请使用以下命令:
Set-TimeZone -Id "UTC"
Restart-Computer
您可以使用名为 Restart-Computer
的适当 PowerShell 命令重新启动本地计算机或远程计算机上的操作系统。执行方式如下:
对于本地计算机:
Restart-Computer
对于网络中的选定计算机:
Restart-Computer -ComputerName Server01, Server03
Restart-Service
要使用 PowerShell 命令停止和重新启动服务,Restart-Service
是适当的 cmdlet。例如,您可以重新启动所有以“Net
”开头的服务:
PS C:\> Restart-Service -DisplayName "net*"
Clear-RecycleBin
应定期清空回收站,这也可以通过 PowerShell 实现。命令为 Clear-RecycleBin
。
Get-ComputerInfo
Get-ComputerInfo
命令用于检索系统和操作系统属性。
Move-Item
当您需要将项目从一个位置重新定位到另一个位置时,您可以使用多个 PowerShell 命令。不过,最常用的选项是 Move-Item
。在此示例中,我们将 old.txt
文件从 C: 驱动器移动到 D:\Temp
目录,同时将其重命名为 new.txt
。
Move-Item -Path C:\old.txt -Destination D:\Temp\new.txt
使用适当的 PowerShell 命令进行监控和调试
启用系统监控和检查的 PowerShell 命令非常有价值,尤其是在实际条件下测试新网络的性能时。以下 PowerShell 命令对于这些目的特别有用。
Debug-Process
调试是一个重要的过程,可确保所有设置和过程无错误运行。为此,您需要下载并配置适当的调试器。完成后,使用 Debug-Process
命令。在以下示例中,我们使用 Explorer 的调试器:
PS C:\> Debug-Process -Name "Explorer"
要同时调试多个进程,只需使用逗号将它们细分即可。
Enable-PSBreakpoint
要激活某些断点,请使用 Enable-PSBreakpoint
命令。从技术角度来看,这会将 cmdlet 的值设置为“true
”。使用这些 PowerShell 命令激活当前会话中的所有断点:
Get-PSBreakpoint | Enable-PSBreakpoint
使用此命令使用其 ID 激活断点:
Enable-PSBreakpoint -ID 0, 3, 4
Disable-PSBreakpoint
要再次停用 PowerShell 断点,适合此目的的 cmdlet 是 Disable-PSBreakpoint
。从技术上讲,Enable-PSBreakpoint
命令的值设置为“false
”。要停用 ID 为 0 的断点,请输入以下内容:
Disable-PSBreakpoint -Id 0
Get-Counter
对于 Windows 设备,您可以使用 PowerShell 检索其性能数据。适合此任务的命令是 Get-Counter
,它既可用于本地计算机,也可用于远程计算机。在以下示例中,我们从本地计算机检索数据:
Get-Counter -ListSet *
Start-Sleep
暂停脚本或会话可能至关重要,尤其是在系统过载的情况下。PowerShell 为此提供了 Start-Sleep
命令,允许您指定应暂停活动的持续时间。在以下示例中,执行暂停两秒钟:
Start-Sleep -Seconds 2
Test-Path
使用 Test-Path
命令检查特定路径的所有元素是否存在。可能的结果是“True
”或“False
”。
Test-Path -Path "C:\Documents and Settings\user"
False
Test-Connection
您还可以使用 PowerShell 评估网络内的网络连接。这是通过 Test-Connection
命令向指定收件人发送 ICMP 回显请求数据包来实现的,该命令通过 Internet 控制消息协议 (ICMP) 请求响应。在我们的示例中,我们通过 IPv6
协议向 Server02 发送请求。
Test-Connection -TargetName Server02 -IPv6
Get-WinEvent
当您需要查看一个或多个事件日志时,您可以使用各种 PowerShell 命令。用于此目的的最实用的 cmdlet 是 Get-WinEvent
。要从本地计算机检索所有日志,您可以使用以下命令:
Get-WinEvent -ListLog *
熟悉掌握这些基础命令后将极大地提升您在日常工作中处理各种任务的能力。
随着经验的积累,您还可以探索更多高级功能,如使用 PowerShell 编写脚本来自动执行重复性任务,进一步提高工作效率。
1. 本栈资源大多存储在云盘,如发现链接失效,请联系我们,我们会第一时间更新。
2. 本栈内资源或文章大多收集自网络,请勿应用于商业用途,如有其它需求,请购买正版支持作者,谢谢!
3. 本栈收集的资源仅供内部学习研究软件设计思想和原理使用,学习研究后请自觉删除,请勿传播,因未及时删除所造成的任何后果责任自负。
4. 若您认为「UPKG.CN」发布的内容若侵犯到您的权益,请联系站长邮箱: admin@upkg.cn 进行删除处理。
暂无评论内容