本文给大家简单描述了一下POWERSHELL和CMD的区别,简单的说,Powershell是cmd的超集,换句话说,cmd能做的事情,Powershell都能做,但是Powershell还能额外做许多cmd不能做的活。
cmd是和powershell都可以做命令行交互,批处理和powershell脚本功能也相当。
我不知道你怎么理解cmd,但下面是powershell是基于.net的,只要你足够了解.net,你可以使用她做任何你想做的事情。
Windows PowerShell 是专为系统管理员设计的新 Windows 命令行 shell。Windows PowerShell 包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用。
与接受和返回文本的大多数 shell 不同,Windows PowerShell 是在 .NET Framework 公共语言运行时 (CLR) 和 .NET Framework 的基础上构建的,它接受和返回 .NET Framework 对象。环境中的这一根本更改带来了管理和配置 Windows 的全新工具和方法。
Windows PowerShell 引入了 cmdlet(读作“command-let”)的概念,这是内置到 shell 中的一个简单的单一功能命令行工具。可以分别使用每个 cmdlet,但是组合使用这些简单的工具执行复杂任务时才发挥其作用。Windows PowerShell 包括一百多个基本的核心 cmdlet,您可以编写自己的 cmdlet 并与其他用户共享它们。
与许多 shell 一样,Windows PowerShell 为您提供了对计算机上文件系统的访问。此外,使用 Windows PowerShell 提供程序还可以访问其他数据存储,如注册表和数字签名证书存储,就像访问文件系统一样容易。
简单的说,Powershell是cmd的超集,换句话说,cmd能做的事情,Powershell都能做,但是Powershell还能额外做许多cmd不能做的活。
主要是系统管理功能、脚本语言和在线帮助更强大,你确实可以只把它当成cmd来用,也可以学和用得更深
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_MACHINESOFTWAREMicrosoft.NETFramework 下 ‘Enable64Bit'的值是多少?
1
|
( Get-ItemProperty -Path hklm:SOFTWAREMicrosoft.NETFramework ).Enable64Bit |
[证书] 指纹为[28DE15612AFF1CD69596AB17AF06AE86CB9C003B]的证书在证书存储区吗?
1
2
|
ls Cert:LocalMachineMy | 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还是比较好用的。
--Windows常用工具类:
运行程序 运行命令
记事本 notepad
计算器 calc
画图 mspaint
写字板 write
Windows放大镜 magnify
辅助工具管理器 utilman
Telnet客户端 telnet
任务管理器 taskmgr
关闭Windows shutdown
扫描仪与相机 sticpl.cpl
远程桌面 mstsc
可移动存储 ntmsmgr.msc
注册表编辑器 regedit
TrueType造字程序 eudcedit
打印机文件夹 printers
打印机和传真 control printers
控制面板 control
屏幕键盘 osk 网络连接 ncpa.cpl 或control netconnections
从Windows注销 logoff 字体文件夹 fonts 或control fonts
磁盘管理 diskmgmt.msc
快速查找 findfast.cpl
磁盘碎片整理程序 dfrg.msc
磁盘检查工具 chkdsk
磁盘清理工具 cleanmgr
剪贴簿查看器 clipbrd
辅助功能选项 access.cpl
添加硬件向导 hdwwiz.cpl
添加或删除程序 appwiz.cpl
常用管理配置工具
设备管理器 devmgmt.msc
Direct X控制面板(如果已经安装) directx.cpl
Direct X诊断工具 dxdiag
磁盘分区管理器 diskpart 显示属性 desk.cpl 或 control desktop
文件夹选项 control folders
显示属性的外观选项卡 control color
文件签名验证 sigverif
IP配置实用程序 ipconfig
键盘属性 control keyboard
鼠标属性 main.cpl 或 control mouse
Internet属性 inetcpl.cpl
密码属性 assword.cpl
电话与调制解调器选项 telephon.cpl
电源选项属性 powercfg.cpl
性能 perfmon
区域和语言选项 intl.cpl
系统属性 sysdm.cpl
用户帐户管理 nusrmgr.cpl
Windows防火墙 firewall.cpl
运行Windows更新 wupdmgr
系统配置实用程序 msconfig
声音和音频设备属性 mmsys.cpl
共享文件夹 fsmgmt.msc
服务 services.msc
Windows安全中心 wscui.cpl
————————————————
下面我们看看能由Windows PowerShell完成的最常见的25个任务。不止是这些任务很简单,显示语句的命令架构和其他PowerShell命令也很简单。掌握好这些基本命令是成为PowerShell专家的必经之路。
入门级别
1. 像文件系统那样操作Windows Registry——cd hkcu:
2. 在文件里递回地搜索某个字符串——dir –r | select string "searchforthis"
3. 使用内存找到五个进程——ps | sort –p ws | select –last 5
4. 循环(停止,然后重启)一个服务,如DHCP——Restart-Service DHCP
5. 在文件夹里列出所有条目——Get-ChildItem – Force
6. 递归一系列的目录或文件夹——Get-ChildItem –Force c:directory –Recurse
7. 在目录里移除所有文件而不需要单个移除——Remove-Item C: obedeleted –Recurse
8. 重启当前计算机——(Get-WmiObject -Class Win32_OperatingSystem -ComputerName .).Win32Shutdown(2)
收集信息
9. 获取计算机组成或模型信息——Get-WmiObject -Class Win32_ComputerSystem
10. 获取当前计算机的BIOS信息——Get-WmiObject -Class Win32_BIOS -ComputerName .
11. 列出所安装的修复程序(如QFE或Windows Update文件)——Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName .
12. 获取当前登录计算机的用户的用户名—— Get-WmiObject -Class Win32_ComputerSystem -Property UserName -ComputerName .
13. 获取当前计算机所安装的应用的名字——Get-WmiObject -Class Win32_Product -ComputerName . | Format-Wide -Column 1
14. 获取分配给当前计算机的IP地址——Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Format-Table -Property IPAddress
15. 获取当前机器详细的IP配置报道——Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Select-Object -Property [a-z]* -ExcludeProperty IPX*,WINS*
16. 找到当前计算机上使用DHCP启用的网络卡——Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName .
17. 在当前计算机上的所有网络适配器上启用DHCP——Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true -ComputerName . | ForEach-Object -Process {$_.EnableDHCP()}
软件管理
18. 在远程计算机上安装MSI包——(Get-WMIObject -ComputerName TARGETMACHINE -List | Where-Object -FilterScript {$_.Name -eq "Win32_Product"}).Install(\MACHINEWHEREMSIRESIDESpathpackage.msi)
19. 使用基于MSI的应用升级包升级所安装的应用——(Get-WmiObject -Class Win32_Product -ComputerName . -Filter "Name='name_of_app_to_be_upgraded'").Upgrade(\MACHINEWHEREMSIRESIDESpathupgrade_package.msi)
20. 从当前计算机移除MSI包——(Get-WmiObject -Class Win32_Product -Filter "Name='product_to_remove'" -ComputerName . ).Uninstall()
机器管理
21. 一分钟后远程关闭另一台机器——Start-Sleep 60; Restart-Computer –Force –ComputerName TARGETMACHINE
22. 添加打印机——(New-Object -ComObject WScript.Network).AddWindowsPrinterConnection(\printerserverhplaser3)
23. 移除打印机——(New-Object -ComObject WScript.Network).RemovePrinterConnection("\printerserverhplaser3 ")
24. 进入PowerShell会话——invoke-command -computername machine1, machine2 -filepath c:Scriptscript.ps1