目录
1. CMD Shell和PowerShell
Windows commands | Microsoft Learn
Windows有两个命令行工具:CMD Shell和PowerShell
- CMD Shell:
- 第一个内置到Windows系统中的shell,用于使用.bat的批处理脚本执行某些任务。
- 只可以运行传统的Windows命令
- DOS系统的产物,所以它的功能很有限。
- PowerShell:
- 扩展CMD Shell的功能,提供一个完整的脚本语言运行环境。
- 既可以运行传统的Windows命令,也可以运行cmdlet的PowerShell命令。
对比如下:
2. cmd和cmdlet
2.1 cmd和cmdlet的区别
① 功能性不同
- cmd命令是指传统的Windows命令
- cmdlet类似于Windows命令,但是提供了更多可扩展的脚本语言功能。
例如:
cd是切换目录命令,Set-Location也是切换目录命令,二者的区别在于:Set-Location命令不仅能用于切换文件目录,也可以用于切换注册表目录、证书存储目录等。这使得PowerShell的Set-Location命令比CMD Shell中的cd命令更强大。
② 输出格式不同
- CMD的输出是纯文本的字符串,这使得对输出进行解析和处理变得困难。
- cmdlet的输出是.net对象,支持更复杂的数据操作。这种对象模型使得数据在管道中传递时能够保留其结构。--详见下文
- cmdlet是由.net编写的,其命令规范遵循 动词-名词 的格式。例如:Get-Process、Set-Location等。
2.2 兼容性
为了实现cmdlet对cmd的兼容,Windows发明了一种alias(别名)的机制,旧版的cmd命令在PowerShell中通过别名链接到一个cmdlet命令。如下所示:
① 查看所有cmd命令别称
注意:此处展示的不全是windows下旧的cmd命令,其中也有一些linux的命令,例如:ls
② 查看指定cmd命令别称
注意:虽然cmd中的cd和PowerShell中的cd长得一样,功能类似,但是底层实现已经完全变了。
2.3 常用cmdlet命令
① Get-Command:获取所有PowerShell支持的命令
② Get-Help <cmdlet命令>:查看指定命令的帮助文档
③ export-csv:指定输出格式为csv
3. 管道和管道符
管道符:|,功能:将上个命令的输出作为下个命令的输入
例如:
① 获取前五个CPU占用率最高的进程
4. 脚本编程
CMD Shell对应的脚本是.bat文件,PowerShell对应的脚本是.ps1文件,二者的区别在于:
- .bat脚本编程非常难用,例如:
- .bat不支持if嵌套,实际编程时需要大量的goto语句,非常不友好
- PowerShell的编程习惯更像现代化的编程语言