8 个 Windows 命令行工具
在 PowerShell 的加持下,Windows 命令行工具得到了全面革新。现在,许多操作只需要通过一行简单的指令就能高效且准确地执行。
和传统中对桌面操作系统的印象有所不同的是,无论是 macOS 还是 Windows 都有着相当丰富完善的命令行工具供我们选择,有时候在终端中输入一条命令,就可以批量高效率的完成一系列原本图形化界面下繁琐的系统操作,从而达到事半功倍的效果。
而说到桌面系统的命令行工具,在现代的 macOS 中我们依旧可以使用那些好用高效的 UNIX 工具,至于 Windows,虽然大家的印象中更多的是其图形化操作界面,但随着这么多年的系统发展,也提供了种类繁多且执行高效的命令行工具,其中不乏那些非常实用的命令行工具,本篇教程将帮助你通过一系列的实用命令行工具,更好的使用 Windows 操作系统。
systeminfo- 参看系统配置信息
安装好操作系统后,这台崭新的计算机详细配置是?诚然通过一些第三方的软件可以详细的看到具体的系统配置信息,不过 Windows 系统中已经自带的一个非常强大的系统配置信息工具——systeminfo,通过这个命令行工具,你可以在终端中看到这台计算机及其操作系统的详细配置信息,包括操作系统配置、安全信息、产品 ID 和硬件属性(例如 RAM、磁盘空间和网卡)。
默认情况下,打开 Windows 的任何一种终端(CMD 或者 Powershell),不加上任何参数直接输入systeminfo
后,终端就会自动打印出当前设备的操作系统配置、安全信息、产品 ID 和硬件属性,如果系统安装的安全更新,也会显示出当前已经安装的安全更新列表。
当然这个命令行工具还可以查看本网络下其他计算机的硬件配置,当然这里你需要知道本网络下其他计算机名, 比如同一网络下有一台名为 superman 的计算机,那么要想在你的电脑上查看这台电脑的配置,就输入命令:
systeminfo /s superman
winget:用命令行更新你的软件
虽然微软近些年开始逐步开放了自己的应用商店,开始允许传统的 win32 软件通过 Microsoft Store 进行软件分发,但相比海量的 Windows 软件,上架 Microsoft Store 的应用依旧少数。那么该如何管理这些第三方的 Windows 软件呢?
或许是从 Linux 发行版的软件包管理上找到了灵感,也或许是 macOS 的第三方包管理器 homebrew 给出的启发,微软也同样祭出了其基于命令行的软件包管理工具:winget,当然相比于 homebrew 和其他 Windows 平台类似的包管理工具,winget 的优势在于这个是微软自己推出的包管理工具,因此管理和使用上自然有着得天独厚的优势。
而使用上其实也非常简单,其基本语法上和很多桌面系统的包管理工具类似,首先打开你的 Windows 终端,如果想要查找某一款软件是否在软件源中,可以输入:
winget search <appname>
如果找到了类似名字的软件就会在终端中返回结果,如果想要安装这个软件,就可以选择复制软件的 ID(在命令行中使用鼠标选中软件 ID 然后点击鼠标右键就可以复制),然后输入:
winget install <appname>
如果软件需要管理员权限才能安装,这时候会弹出 UAE 对话框选择允许即可。软件安装完成之后会在终端返回软件安装状态。如果想要知道某一款软件的详细信息,那么可以输入下面的这个命令:
winget show <appname>
那么电脑上到底安装了多少软件呢?这里可以使用下面的这个命令将软件列出来。
winget list
习惯使用 winget 来进行 Windows 上应用程序的管理还有一个好处,你可以进行统一的软件更新而无需再手动到软件主页下载安装,比如当你需要对安装到系统中所有的软件包检查是否有更新时,就只需要输入:
winget upgrade
稍等片刻就会列出当前系统下可以更新的软件包列表,包括软件 ID 、版本、可用(升级版本)以及软件源,如果想要升级其中的一款软件,那么只需要输入:
winget upgrade <appname>
winget upgrade --all #升级所有可以升级的包
当然 winget 还有很多有趣且实用的命令,你可以输入:winget --help
来查找命令,有了这样的工具,你在管理安装在本地的软件会更加得心应手。
用终端命令检查系统更新
相比于 Linux 系统可以通过包管理系统实现系统更新升级,在 Windows 上就不那么方便快捷了,不过随着 PowerShell 的进化,现在也可以直接使用命令行来执行系统级别安全更新。
不过这个方案首先需要安装一个第三方的 PowerShell Module——Windows Update module for Windows Powershell(模块地址),这里我们先在在 Windows 开始徽标上点击鼠标右键,在快捷菜单中打开终端管理员,然后输入如下命令来安装这个名为「Windows Update module for Windows Powershell」的模块:
Install-Module PSWindowsUpdate
根据步骤确认后,我们就可以使用如下命令来连接 Windows Update 并检查是否有系统安全更新了:
Get-WindowsUpdate
如果有相应的系统更新,则可以直接执行下面这个命令来进行安装:
Install-WindowsUpdate
如果你想要查看当前计算机已经安装的更新的详细信息,比如说更新标题、描述、HotFixID、安装日期等,可以输入下面这个命令:
wmic qfe list
Process cmdlet:命令行方式管理系统进程
作为一个 Windows 系统使用的老手,熟练的打开任务管理器然后结束掉某些程序的进程可谓是轻车熟路,但这些操作都依赖图形化的界面——如果你遇到了系统严重卡顿到无法打开任务管理器的情况,那么使用命令行来管理系统进程或许会更加高效一些。
在 Windows 终端(这里特指 PowerShell)中,你可以使用 Process cmdlet 来查看 / 管理系统进程,比如说列出当前系统中的所有进程,只需要输入:
Get-Process
或者输入 Get-Process 的别名:
ps
这时候终端就会返回当下的所有进程的列表。注意我们主要关注的是列表中的两个项目,一个是 ID ,一个是 ProcessName,比如说我需要查看某个 ID 对应的进程信息(比如当前的这个 ID 为 3604 的进程),那么输入命令:
Get-Process -id 3604
或者:
ps -id 3604
当然我们也可以从名字入手,比如列出所有进程名以 Adobe 开头的进程:
Get-Process -Name Adobe*
或者
ps -Name Adobe*
既然我们可以定位进程,那么接下来最重要的就是管理进程(事实上很多时候我们也是通过任务管理器来结束进程),比如最常用的结束进程,这里我需要当下结束 Excel 程序的进程,那么就输入这个命令:
Stop-Process -Name EXCEL
或者
kill -Name EXCEL
这里结束任务不会给出任何提醒,所以为了避免误操作,也可以加上一个提示的参数,只有输入 Y 才能结束进程:
Stop-Process -Name EXCEL -Confirm
或者
kill -Name EXCEL -Confirm
有些时候我们甚至还能会遇到很多程序或者进程无响应的情况,那么这里也有一键杀掉所有无响应进程的办法,就是输入下面这条命令,会将系统中标记为无响应的进程全部杀掉:
Get-Process | Where-Object -FilterScript {$_.Responding -eq $false} | Stop-Process
Start-Process:用命令行的方式打开文件或者打开程序
虽然我们习惯于通过图形化的形式来对文件进行管理,或者直觉上使用双击图标的方式启动程序,但事实上在 Windows 上我们可以使用命令行的形式快速打开文件或者程序。
比如我想要打开放在桌面的 Markdown 文档,那么这里我们依旧使用的是 Windows 终端(PowerShell),然后输入以下命令,使用默认程序来打开 Markdown 文档:
Start-Process -Filepath "C:\Users\liuxi\Desktop\opera.md"
或者使用别名:
start "C:\Users\liuxi\Desktop\opera.md"
执行后会使用我的默认 Markdown 编辑器(Typora)来打开这个文档,当然这个方法还可以用来打开特定的文件夹,比如说我要使用文件资源管理器打开桌面文件夹,那么输入下面这个命令:
Start-Process -Filepath "C:\Users\liuxi\Desktop\"
或者使用别名
Start "C:\Users\liuxi\Desktop\"
这时候就会直接调用文件资源管理器来打开桌面这个文件夹,那么能不能执行软件呢?比如说打开记事本这个应用?当然可以,直接输入以下命令:
Start-Process -Filepath "notepad.exe"
或者使用别名:
Start "notepad.exe"
当然这个是系统原生的应用,对于第三方应用,执行的话需要具体的程序路径,比如说打开我的 Steam 客户端,输入的命令就需要改成:
Start-Process -Filepath "C:\Program Files (x86)\Steam\Steam.exe"
或者
Start "C:\Program Files (x86)\Steam\Steam.exe"
通过打开命令,还可以实现一个意想不到的功能:给终端提权,比如说有时候需要用管理员身份启动 PowerShell,那么就输入以下的命令:
Start-Process -FilePath "Powershell" -Verb RunAs
或者更短的写法:
Start "Powershell" -V RunAs
这时候会以管理员身份打开一个新的 PowerShell 进程,省去了通过图形化界面点击操作的麻烦。
使用 PowerShell 来管理网络
虽然在 Windows 有相当好用的图形化工具来管理网络,但命令行工具则更为高效,以往我们都会使用 CMD 命令(ping 命令或者 ipconfig)来进行管理,既然到了 PowerShell 的时代,那么选择更高级的工具自然也就顺势而为。
比如你需要列出当前这台电脑的 IP 地址,使用 PowerShell 就输入如下命令:
Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true | Select-Object -ExpandProperty IPAddress
需要注意的是,这个命令返回后会呈现的包括 IPv4 和 IPv6 的地址,并且输出的为活动 IP(如果是 CMD 的 ipconfig 命令会把其他适配器的不活动 IP 都呈现打印出来)。那么如果要列出具体某个网络适配器的 IP 配置数据,就需要输入下面这个命令:
Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true
打印结果就是显示当前活动的网络适配器是什么,网络服务名是什么以及是否是 DHCP 等等。
作为最为常用的网络工具,在 PowerShell 中也可以使用 ping 命令,比如说我想要测试下和 223.5.5.5 这个 IP 是否连通,那么就执行下面这段命令:
Get-CimInstance -Class Win32_PingStatus -Filter "Address='223.5.5.5'" | Format-Table -Property Address,ResponseTime,StatusCode -Autosize
如果返回的 StatusCode 为 0 就表示当前网络可以正常和 223.5.5.5 连通。而如果想要查看当前设备下有哪些网络适配器,则可以输入下面这条命令:
Get-CimInstance -Class Win32_NetworkAdapter
这会将当前的网络适配器列表打印到终端。
clip:将命令输出从命令行重定向到 Windows 剪贴板
和图形界面上的功能类似,在 Windows 上也可以通过命令来将文本重定向到剪切板,这里可以是指定的操作命令输出的数据,也可以就是文件内容数据。
比如我们需要将当前目录列表发送到剪切板,那么就在 Windows 终端中,直接输入以下命令:
dir | clip
这时候剪切板中记录下了当前目录的列表的文本信息(你可以使用 Windows 徽标键 + V
打开剪切板查看)。当然我们也可以将文本文档中的数据放到剪切板中,比如当前系统桌面上的放置了一个名为2. txt
的文档,那么输入以下命令可以将这个文档中内容传输到剪切板中:
clip < 2.txt
同样执行完成之后,用 Windows 徽标键 + V
打开剪切板就可以看到最新剪切板文本内容就是 2.txt
的数据内容。
Powercfg:用命令行管理计算机电源
相比于在图形界面上进行系统电源管理,使用命令行进行电源管理一大好处的就是步骤简单而且效率极高,而使用的核心命令就是 Powercfg,比如现在我们列出当前计算机中的所有电源方案,这里只需要打开 Windows 终端,然后输入如下命令:
powercfg /list
可以看到当前计算中包含有三种可选的电源方案,其中有 *
标记的就是当前正在使用的方案。那么如果需要激活某个电源方案(比如激活高性能的电源方案),则输入如下命令进行方案的切换:
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
这时候再输入 powercfg /list
,就会发现激活的方案变成了高性能的那种。对于某一个电源方案,具体是哪些内容,则可以输入下面这个命令来查看:
powercfg /query 381b4222-f694-41f0-9685-ff5bb260df2e
这个命令可以查看当前电源方案下的各个子方案的设置情况,如果想要修改其中的设置,那么就需要用到 /change
语法,比如说如果需要修改屏幕在接电时候的空闲关闭时间,将其设置为 5 分钟后关闭,那么输入命令为:
powercfg /change monitor-timeout-ac 5
有时候我们需要对设备进行唤醒或者禁用睡眠的操作,在命令行中执行也更为简单直接,比如启用休眠功能,就输入命令(使用管理员权限打开终端):
powercfg /hibernate on
对应的关闭休眠功能,命令就是:
powercfg /hibernate off
在平时计算机使用过程中,有时候经常会遇到比如电池使用情况,比如睡眠时候发现还在耗电等等,这里我们可以输入这个命令来生成一份电池状态报告文档:
powercfg /batteryreport
这个命令就可以详细记录电池使用的诸多细节,帮助你找到那些进程是让电池大量耗电的罪魁祸首。同样,由于现在微软的新型待机常常会存在各种问题(盒盖之后设备并不休眠),也可以通过以下命令来生成待机质量报告:
powercfg /sleepstudy
这样我们就可以从报告中直观的看出到底是哪个系统项导致设备出现了无法待机的情况,好方便我们及时进行调整。
结语
相比于 Linux 和 macOS,近些年的 Windows 也一直都在完善自己的命令行工具,虽然对比 UNIX Like 的命令行工具显得不是那么的全面,但有了 PowerShell 的加持,Windows 的命令行工具也开始全面革新,通过简单的语法就可以高效准确地设置诸多功能和执行操作,当然也欢迎你在评论区分享你经常使用的 Windows 命令行工具,告诉我们你是如何用好 Windows 的。