微软在 2006 年推出首款 PowersShell 1.0 版本,适用于 Windows Server 2008 操作系统,并作为 PowersShell 2.0 被正式预装在之后的 Windows 7 操作系统中。在 Windows 8 中,内置的 PowerShell 更进一步,升级为 PowerShell 3.0,Windows 8.1 则对应着 PowerShell 4.0 版本。在我写下本段文字,PowerShell 已经迎来了它的另一个新版本 PowerShell 6.0。这些变化背后,离不开它强大的开源支持。你可以在 Github 找到它的开源代码。
PowerShell 跨平台,这意味着你可以将编写好的代码用来管理 Windows、Macintosh,甚至是 Linux 操作系统。这一点是 Windows 下的原始批处理文件(batch file)所不能比拟的。
cmdlet
cmdlet(中译名 “短命令”)是 PowerShell 命令体系的基础。
动词-名词
这是 cmdlet 的基本语法结构。cmdlet 是一个内置到 shell 中的简单的单一功能命令行工具。可以就像使用传统的命令和实用工具那样使用 cmdlet。首先在 Windows PowerShell 命令提示符下键入 cmdlet 的名称。Windows PowerShell 命令不区分大小写,因此可以用任意大小写键入。
0x00:兼容 Linux 命令
PowerShell 将一些命令做了别名处理,以取悦那些 Linux 专家的习惯。常见的如 ls
命令,你也可以用 dir
、gci
命令进行调用。
当然,你还可以使用 tree
命令将结果以文件树的形式输出。
0x01:查看帮助文档
类似 Linux 的 man 命令,PowerShell 有一个名为 get-help
的命令。
0x02:列出所有进程或服务
使用 get-process
段命令列出本地机器上的所有进程。它是 ps
命令的别名。
使用 get-service
短命令列出本地机器上的所有服务,包括停止和正在运行的。
0x03:输出结果筛选
类似 Linux 的 grep 命令,PowerShell 有一个 select-string
命令。
0x04:清屏
使用 clear-host
短命令、cls
命令,或 clear
命令进行终端清屏。
0x05:新建项目
这是 PowerShell 的一个特色命令。它不仅可以在制定路径创建文件、文件夹,还可以创建制定类型的文件系统;在注册表中,New-Item
创建注册表项和条目。
编写并运行 PowerShell 脚本
PowerShell 脚本的钦定的文件后缀名为 .ps1
,s 后面跟的是数字 1。
保存为后缀为 .ps1
的脚本文件即可。只要你的操作主机安装了 PowerShell,就可以执行运行。如果直接 .\文件名
会报错。因为 PowerShell 默认禁止在终端运行脚本程序。对此我们有一条命令用来绕过执行该脚本。
powershell.exe -ExecutionPolicy Bypass -File 文件名.ps1
在 CMD 下执行亦可。注意命令前缀 powershell.exe
必不可少。
如果嫌麻烦,可以永久的改变本机的 PowerShell 执行策略。
Set-ExecutionPolicy Bypass
和上面的单独绕过不同,该操作必须具有管理员权限,否则会报错。
和注册表愉快的玩耍
PowerShell 的另一个吸引人的特性是,它允许你直接在终端里,像访问普通的文件系统那样访问 Windows 注册表。记住,我们直接访问的是键,它相当于普通文件系统的目录,而它其下包含的值和普通意义上的文件有一些区别,所谓的值显示在属性栏,与其他属性一同组成一个完整的值。
我们知道,文件系统的文件对象具有三大属性:所谓读、写、执行权限。只要是和键的读取有关的,在 PowerShell 的注册表交互中都可以像普通文件一样的交互。读的属性,比如:列出某键下的所有子键,这时候你就应该想到 ls
命令。当然更规范的写法应该是 get-childitem
短命令。
短命令 | 作用 | 别名 |
---|---|---|
Get-ChildItem | 列出某键的所有子键 | ls, dir |
Get-ItemProperty | 列出某键的所有属性 | - |
Set-Location | 更改当前操作的键 | cd |
Set-ItemProperty | 更改某键的某值 | - |
New-ItemProperty | 给某键新建一个值 | - |
Clear-ItemProperty | 删除某键的值的内容 | - |
Remove-ItemProperty | 删除某键的值 | - |
New-Item | 创建一个新键 | md |
Remove-Item | 删除一个键 | del |
Test-Path | 验证某键是否存在 | - |