浅谈CMD和win powershell的区别
cmd是和powershell都可以做命令行交互,批处理和powershell脚本功能也相当。
我不知道你怎么理解cmd,但下面是powershell是基于.net的,只要你足够了解.net,你可以使用她做任何你想做的事情。
WindowsPowerShell是专为系统管理员设计的新Windows命令行shell。WindowsPowerShell包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用。
与接受和返回文本的大多数shell不同,WindowsPowerShell是在.NETFramework公共语言运行时(CLR)和.NETFramework的基础上构建的,它接受和返回.NETFramework对象。环境中的这一根本更改带来了管理和配置Windows的全新工具和方法。
WindowsPowerShell引入了cmdlet(读作“command-let”)的概念,这是内置到shell中的一个简单的单一功能命令行工具。可以分别使用每个cmdlet,但是组合使用这些简单的工具执行复杂任务时才发挥其作用。WindowsPowerShell包括一百多个基本的核心cmdlet,您可以编写自己的cmdlet并与其他用户共享它们。
与许多shell一样,WindowsPowerShell为您提供了对计算机上文件系统的访问。此外,使用WindowsPowerShell提供程序还可以访问其他数据存储,如注册表和数字签名证书存储,就像访问文件系统一样容易。
简单的说,Powershell是cmd的超集,换句话说,cmd能做的事情,Powershell都能做,但是Powershell还能额外做许多cmd不能做的活。
主要是系统管理功能、脚本语言和在线帮助更强大,你确实可以只把它当成cmd来用,也可以学和用得更深
powershell的优点
没有做不到,只有想不到。用PowerShell甚至可以LoadC/C++写的dll,然后执行里面的代码,COM就不说了。跑题了,题主问不同,窃以为PowerShell和cmd最大的不同,并且也是和其它*nixShell最大的不同在于PowerShell的pipe传递的是.netobject,而不是raw字符串,于是这就打开了一扇神奇的大门,因为PowerShell的一切组件都可以和谐地共存,彼此不用互相猜忌,不用猜你喂给我的数据合不合法,也不用担心我喂给你的参数格式对不对。大家共享一个CLR,拥有丰富的metadata,自由自在地在.net的世界里徜徉和探索。顺带宣传一下https://chocolatey.org/,Windows的apt-get,基于PowerShell
PowerShell为什么强大
微软是一个很”低调”的公司,取名为微软,感觉有“微微软下去”的意思,这是个玩笑了。windows操作系统和office办公软件,如此之优秀,微软也没敢命名为PowerOS和PowerOffice,但是在Monad(PowerShell的前身)发布后的第二年(2006年),微软就直接就发布了WindowsPowerShell1.0,并且”大言不惭“地命名为PowerShell,这也有点太不淡定了。
今天我根据自己的体验来稍微总结一下为什么PowerShell如此之强大。
破天荒的方便
诸如存储计算中GB,MB,KB单位等;数组声明中的1..n和下标为-1的处理;还有所见即所得,通俗易懂的动词+名词结构Cmdlet。
面向对象
与面向过程相比,面向对象更方便更容易描述现实世界,也算赶上了时髦。
绑上.NET这棵大树
正所谓大树下面好乘凉,PowerShell绑上.NET这个大款了,借助.NETFramework平台强大的类库,几乎让一切都成为可能。
强大的兼容性
完全兼容windows平台上其它调用,如可执行文件(exe),批处理bat和vbscript等。
基于平台的可扩展性
微软有个优点,与应用相比,它更喜欢做平台。PowerShell早已变成一个平台,在PowerShell刚发布的第二年,微软的SystemCenterOperationsManager和SharePoint就提供了针对该平台的组件,后来的活动目录,Hyper-V,WindowsAzure,Office365就更不用说了。除了微软,亚马逊的云平台管理,Dell的out-of-hand管理,也都提供了基于PowerShell的管理组件。PowerShell俨然变成了一个标准,变成了一个规范。
举例介绍
如果您第一次听说过PowerShell,想稍微观望下,且看下面的10个例子。
[数学计算](39+79-51)*497/28=?
心算再快,应当也没有敲回车键快吧:
PS>(39+79-51)*497/28 1189.25
[日期]距离下一个情人节还有多少分钟?
我知道距离多少天好算,如果变成分钟呢?
$now=Get-Date $day=[datetime]'2-14' if($now-lt$day){ $day.Subtract($now).TotalMinutes } else{ $day.AddYears(1).Subtract($now).TotalMinutes }
[容量]3GB>3145726KB吗?
PS>3gb-gt3145726kb True
[ID]能产生一个GUID吗?
PS>[guid]::NewGuid() Guid ---- 0f283ab4-f402-400c-98ce-359442f11f1a
[文件]Windows目录下所有可执行文件exe的大小是多少?
dir$env:windir-Filter*.exe|measure-SumLength
[注册表]注册表路径HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework下‘Enable64Bit'的值是多少?
(Get-ItemProperty-Pathhklm:SOFTWARE\Microsoft\.NETFramework).Enable64Bit
[证书]指纹为[28DE15612AFF1CD69596AB17AF06AE86CB9C003B]的证书在证书存储区吗?
lsCert:\LocalMachine\My\| where{$_.Thumbprint-eq'28DE15612AFF1CD69596AB17AF06AE86CB9C003B'}
[服务]打印机服务有没有启动呢?
Get-Servicespooler
[进程]当前运行了多少个IE进程?
(Get-Processiexplore).count
[报表]将所有运行的进程信息导出为HTML报表?
Get-Process|ConvertTo-Html|Out-Filea.html
现在知道了powershell的强大了吧,在windows平台powershell还是比较好用的。