当前位置: 移动技术网 > IT编程>脚本编程>Shell > 你应该选择 Powershell 的10个理由(抛弃 cmd)

你应该选择 Powershell 的10个理由(抛弃 cmd)

2017年10月07日  | 移动技术网IT编程  | 我要评论
powershell 从 windows7 时代开始内置于 windows 系统当中,可以看作是微软对 cmd 的大升级,目前两者并存于 windows 系统中。 首先强

powershell 从 windows7 时代开始内置于 windows 系统当中,可以看作是微软对 cmd 的大升级,目前两者并存于 windows 系统中。

首先强烈推荐一个 powershell 学习网站:

1. powershell 更加 “powerful”

微软起“powershell”这个名字虽然有吹牛逼的嫌疑(我以前也这样想),但从事实来看并非如此。powershell 的强大程度分分钟秒杀 linux 上的 bash,更不要说饱受诟病的 cmd 了。(无意打广告)

2. powershell 全面支持面向对象

powershell 背后依靠的是一套完整的 .net 编程体系,其脚本更容易编写且稳健性大大提升。反过来看 cmd,那些完全由各种命令堆砌而成的一条条指令简直就是“小打小闹”。

3. 从 cmd 迁移到 powershell 成本几乎为零

如果你对老朋友 cmd 充满情怀,无法舍弃,完全无妨!因为 powershell 可以看作 cmd 的超集,所有的常用命令诸如dir, cd, ipconfig等在 powershell 中都能直接使用。但背后的实现方式是完全不同的,powershell 基于完全的面向对象,它通过给函数和对象“起别名”的方式来支持这些旧的命令。

4. 诱人的管道操作

管道操作的灵感来自 linux 的 shell,但由于 powershell 将一切都包装成为对象,而不是直接处理字符串,因此其管道操作的灵活程度远在 linux 的 shell 之上。

例如:

ps c:\users\haley> ls | sort -descending name | format-table name,mode

name              mode
----              ----
virtualbox vms         d-----
videos             d-r---
searches            d-r---
saved games          d-r---
pictures            d-r---
onedrive            d-r---
music             d-r---
links             d-r---

这条命令列出当前路径下的所有文件,按照名称降序排序,并以表格的形式输出,且只显示name和mode两个字段。

5. 绝对完备的帮助文档

任何函数与对象都能够通过help *命令来查看其帮助文档(准确来说应该是get-help函数,这是更加“面向对象”化的命名方式,而help是它的别名),如果看不明白,加上-examples参数会有应用实例,如果仍看不明白,加上-online参数会打开完整的在线帮助文档,不得不佩服,微软的一条龙服务做的很到位。

例如,关于ls的帮助文档如下:

ps c:\users\haley> help ls

名称
  get-childitem

摘要
  gets the items and child items in one or more specified locations.


语法
  get-childitem [[-filter] <string>] [-attributes {readonly | hidden | system | directory | archive | device | normal
   | temporary | sparsefile | reparsepoint | compressed | offline | notcontentindexed | encrypted | integritystream |
   noscrubdata}] [-depth <uint32>] [-directory] [-exclude <string[]>] [-file] [-force] [-hidden] [-include <string[]>
  ] -literalpath <string[]> [-name] [-readonly] [-recurse] [-system] [-usetransaction] [<commonparameters>]

  get-childitem [[-path] <string[]>] [[-filter] <string>] [-attributes {readonly | hidden | system | directory | arch
  ive | device | normal | temporary | sparsefile | reparsepoint | compressed | offline | notcontentindexed | encrypte
  d | integritystream | noscrubdata}] [-depth <uint32>] [-directory] [-exclude <string[]>] [-file] [-force] [-hidden]
   [-include <string[]>] [-name] [-readonly] [-recurse] [-system] [-usetransaction] [<commonparameters>]


说明
  the get-childitem cmdlet gets the items in one or more specified locations. if the item is a container, it gets the
   items inside the container, known as child items. you can use the recurse parameter to get items in all child cont
  ainers.

  a location can be a file system location, such as a directory, or a location exposed by a different windows powersh
  ell provider, such as a registry hive or a certificate store.


相关链接
  online version: http://go.microsoft.com/fwlink/?linkid=821580
  get-item
  get-location
  get-process
  get-psprovider

备注
  若要查看示例,请键入: "get-help get-childitem -examples".
  有关详细信息,请键入: "get-help get-childitem -detailed".
  若要获取技术信息,请键入: "get-help get-childitem -full".
  有关在线帮助,请键入: "get-help get-childitem -online"

6. 支持基本的数学运算和数组操作(加减乘除模),打开就能当计算器用

ps c:\users\haley> 1 + 1
2
ps c:\users\haley> 3 * 5
15
ps c:\users\haley> 0xab
171
ps c:\users\haley> 1kb
1024
ps c:\users\haley> 1mb / 1kb
1024

7. 良好的脚本编程体验

powershell 脚本的语法与高级编程语言非常相近,例如其分支语句if(...){} else{}、循环语句for(...){}与 c 语言别无二致,因而大大提高了编程体验。

8. 拥有丰富的字符串操作对象和函数,全面支持正则表达式

字符串处理是 shell 脚本的主要任务,正则表达式的重要性也无需多说。

9. 支持重定向,读写文件易如反掌

powershell 原生支持将结果导出到html, csv, xml等文件,也可以通过重定向从文件中读取内容。

例如:

ps c:\users\haley> ls | select-object mode,name | export-csv ~/desktop/test.csv

这样就把当前目录下的所有 文件名-读写权限 保存到了一个 csv 文件中。

10. 支持 debug

虽然这个功能很少用到,但支持 debug 是走向完备编程语言不可或缺的一项功能。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网