powershell和cmd区别:
最浅显的区别就是:CMD写的BAT脚本我们看作是面向过程的,直白点说就是你是从计算机执行的流程来编写脚本的。而PowerShell则是面向对象的,是一种站在使用者的角度进行脚本的编写.
功能上:
CMD只能执行基本的任务,本身并没有集成太多的功能,大多依赖于第三方的程序,比如PING命令,其实是一个单独的应用程序,而不是CMD本身的一条命令。
PowerShell因为是基于.NET面向对象的,而且本身就内置了非常多的命令。使得它不管从功能上还是性能上都要比CMD要强大得多。
可以这么说,CMD能办的事,PowerShell基本都就能办,但PowerShell能办的事,CMD遥不可及。
目前唯一CMD比PowerShell强的一点就是所有版本的Windows中都自带有CMD,包括XP和2003这些很老的操作系统,而PowerShell要在XP和2003里用起来,就需要使用安装包安装.但这不熟于技术范畴,只是目前的环境造就了这个优势,而且不久的将来,这个微弱的优势也将不复存在,因为新版本的Windows中都已经内置了PowerShell了。
powershell的优点
没有做不到,只有想不到。用 PowerShell 甚至可以 Load C/C++ 写的 dll,然后执行里面的代码,COM 就不说了。跑题了,题主问不同,窃以为 PowerShell 和 cmd 最大的不同,并且也是和其它 *nix Shell 最大的不同在于 PowerShell 的 pipe 传递的是 .net object,而不是 raw 字符串,于是这就打开了一扇神奇的大门,因为 PowerShell 的一切组件都可以和谐地共存,彼此不用互相猜忌,不用猜你喂给我的数据合不合法,也不用担心我喂给你的参数格式对不对。大家共享一个 CLR,拥有丰富的 metadata,自由自在地在 .net 的世界里徜徉和探索。顺带宣传一下 https://chocolatey.org/ ,Windows 的 apt-get,基于 PowerShell
PowerShell为什么强大
微软是一个很”低调”的公司,取名为微软,感觉有“微微软下去”的意思,这是个玩笑了。windows 操作系统 和office办公软件,如此之优秀,微软也没敢命名为PowerOS 和 PowerOffice,但是在Monad(PowerShell的前身)发布后的第二年(2006年),微软就直接就发布了Windows PowerShell 1.0,并且”大言不惭“地命名为PowerShell,这也有点太不淡定了。
今天我根据自己的体验来稍微总结一下为什么PowerShell如此之强大。
破天荒的方便
诸如存储计算中GB,MB,KB单位等;数组声明中的1..n和下标为-1的处理;还有所见即所得,通俗易懂的动词+名词结构Cmdlet。
面向对象
与面向过程相比,面向对象更方便更容易描述现实世界,也算赶上了时髦。
绑上.NET这棵大树
正所谓大树下面好乘凉,PowerShell绑上.NET这个大款了,借助.NET Framework平台强大的类库,几乎让一切都成为可能。
强大的兼容性
完全兼容windows 平台上其它调用,如可执行文件(exe),批处理bat和vb script等。
基于平台的可扩展性
微软有个优点,与应用相比,它更喜欢做平台。PowerShell早已变成一个平台,在PowerShell 刚发布的第二年,微软的System Center Operations Manager 和 SharePoint就提供了针对该平台的组件,后来的活动目录,Hyper-V,Windows Azure,Office 365就更不用说了。除了微软,亚马逊的云平台管理,Dell的out-of-hand 管理,也都提供了基于PowerShell的管理组件。PowerShell 俨然变成了一个标准,变成了一个规范。
举例介绍
如果您第一次听说过PowerShell,想稍微观望下,且看下面的10个例子。
[数学计算] (39+79-51)*497/28 = ?
心算再快,应当也没有敲回车键快吧:
1
2
|
PS > (39+79-51)*497/28 1189.25 |
[日期] 距离下一个情人节还有多少分钟?
我知道距离多少天好算,如果变成分钟呢?
1
2
3
4
5
6
7
8
|
$now = Get-Date $day =[datetime] '2-14' if( $now -lt $day ){ $day .Subtract( $now ).TotalMinutes } else{ $day .AddYears(1).Subtract( $now ).TotalMinutes } |
[容量] 3GB > 3145726KB吗 ?
1
2
|
PS > 3gb -gt 3145726kb True |
[ID]能产生一个GUID吗?
1
2
3
4
5
|
PS > [guid]::NewGuid() Guid ---- 0f283ab4-f402-400c-98ce-359442f11f1a |
[文件] Windows目录下所有可执行文件exe的大小是多少?
1
|
dir $env :windir -Filter *.exe | measure -Sum Length |
[注册表] 注册表路径HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework 下 ‘Enable64Bit’的值是多少?
1
|
( Get-ItemProperty -Path hklm:SOFTWARE\Microsoft\.NETFramework ).Enable64Bit |
[证书] 指纹为[28DE15612AFF1CD69596AB17AF06AE86CB9C003B]的证书在证书存储区吗?
1
2
|
ls Cert:\LocalMachine\My\ | where { $_.Thumbprint -eq '28DE15612AFF1CD69596AB17AF06AE86CB9C003B' } |
[服务] 打印机服务有没有启动呢?
1
|
Get-Service spooler |
[进程] 当前运行了多少个IE进程?
1
|
( Get-Process iexplore ).count |
[报表] 将所有运行的进程信息导出为HTML报表?
1
|
Get-Process | ConvertTo-Html | Out-File a.html |
现在知道了powershell的强大了吧,在windows平台powershell还是比较好用的。