
图1:PowerShell打开方式
问题来了,PowerShell这货凭什么力压CMD,强行上位?如果你之前试用过PowerShell,相信它一定没有给你什么好印象。打开慢!反应慢!命令还陌生!还动不动就弹一大堆谁都看不懂错误,PowerShell究竟凭什么在Windows10创意者更新中替代命令提示符CMD呢?微软脑抽了?
微软没有脑抽,PowerShell是凭借其强大的功能替换CMD的。这里要先说明以下PowerShell究竟是什么东西,或者它究竟是不是东西?
Windows PowerShell不是东西,它是专为系统管理员设计的新Windows命令行shell,它包括交互式提示和脚本环境。PowerShell定义很多命令与操作系统,特别是与文件系统交互,能够启动应用程序,甚至操纵应用程序;PowerShell允许将几个命令组合起来放到文件里执行,实现文件级的重用,也就是说有脚本的性质;PowerShell能够能够充分利用.Net类型和COM对象,来简单地与各种系统交互,完成各种复杂的、自动化的操作。
用人话说就是CMD能做的PowerShell都能做,CMD不能做的Powershell也能做。就是这么自信!不信?赶紧打开PowerShell把下面的命令复制进去,看看它干了什么事,然后你用CMD做出来吧!
# create new excel instance
$objExcel = New-Object -comobject Excel.Application
$objExcel.Visible = $True
$objWorkbook = $objExcel.Workbooks.Add
$objWorksheet = $objWorkbook.Worksheets.Item(1)
# write information to the excel file
$i = 0
$first10 = (ps | sort ws -Descending | select -first 10)
$first10 | foreach -Process {$i++ $objWorksheet.Cells.Item($i,1) = $_.name $objWorksheet.Cells.Item($i,2) = $_.ws}
$otherMem = (ps | measure ws -s).Sum - ($first10 | measure ws -s).Sum
$objWorksheet.Cells.Item(11,1) = "Others" $objWorksheet.Cells.Item(11,2) = $otherMem
# draw the pie chart
$objCharts = $objWorksheet.ChartObjects
$objChart = $objCharts.Add(0, 0, 500, 300)
$objChart.Chart.SetSourceData($objWorksheet.range("A1:B11"), 2)
$objChart.Chart.ChartType = 70
$objChart.Chart.ApplyDataLabels(5)

图2:使用PowerShell生成Excel图表
上面一段代码是PowerShell界常见的一段神代码,很多初学者被其带入了PowerShell的大门。有效代码不过20来行,作用是把当前系统中最占内存的10个进程的数据发送到Excel中,并绘制成三维饼图。CMD是很难做到了,被替代也理所应当了。
PowerShell的定位是操作系统和应用程序的管理工具,从这个角度看,它是CMD的升级版,并非简单的对CMD进行扩展,事实上微软也不打算扩展和升级CMD了,以后PowerShell将全方位的替代CMD,目前CMD和PowerShell还是并存状态。
下面正式介绍PowerShell。
一、简单的命令
在CMD中,命令是从非常简单(如attrib.exe)到非常复杂(如netsh.exe)的可执行程序,新入门用户一旦遇到复杂命令,只能束手无策,只能求助搜索引擎,解决当前需求之后,就把命令的用法抛诸脑后,下次使用又要重新学习,极其不便。

图3:复杂的netsh命令
PowerShell命令设计非常规范,它的命令由“动词”和“名词”两部分组成,比如“get”表示检索数据,“process”表示系统进程,把“get”和“process”组合起来的PowerShell命令就是“get-process”,意思是获取系统进程列表,这种命令在PowerShell中称为“cmdlet(读作“command-let”)”。

图4:使用get-process命令获取系统进程
像“get-process”这样“动词-名词”结构有个好处,具有相同“名词”的命令通常是一类命令,比如都拥有“process”的命令有:

图5:拥有“process”的命令
使用“动词-名词”结构还有一个好处,就是不同的“动词”和“名词”可以自由组合,很少的几个“动词”和“名词”就可以组合出大量的可用命令,使命令记忆量大为降低,只需记住简单的几个词语,就可以使用大量的命令,这是包括命令提示符CMD在内的Shell不具备的,并且不会产生歧义,对新用户非常友好。
二、别名系统
“动词-名词”结构的cmdlet固然对新手友好,但也带来了另一个问题,命令名称过长,在命令行交互使用时不方便,在命令行窗口输入命令可以使用Tab键进行补全,可是经常使用还是需要键入大量的内容,要是能够把命令缩短一些就好了。PowerShell在设计时已经考虑到了,为此创建了别名系统,之所以叫名别系统,是因为PowerShell中的别名非常强大,能够非常方便的对别名进行增加、删除、修改,还为之创建了别名驱动器,可以像访问文件系统驱动器一样方便的访问别名驱动器。
PowerShell非常贴心的为用户创建了大量内置别名,一方面减少了常用命令的输入长度,另一方面也为熟悉其它Shell而不熟悉PowerShell的用户提供了方便,常见Shell如bash、cmd,PowerShell都为用户提供了他们熟悉的别名。下面是可以在Powershell中使用的通用的Cmd.exe和UNIX命令的简短列表。

图6:PowerShell兼容性别名列表
PowerShell除了自带别名外,用户自己也可以创建别名,不仅仅可以为cmdlet创建别名,也可以为PowerShell函数、带参数的命令和包含完整路径的命令行程序创建别名。
比如为记事本创建别名,可以使用如下命令:
New-Alias np c:\windows\notepad.exe
创建别名完成后,在命令行中输入np就能直接打开记事本。在命令行中创建的别名只能在当前命令行窗口中使用,如果想以后也能使用此别名,可以把以上命令保存在PowerShell配置文件中,以后无论是在命令行中,还是使用脚本,都可以在本机使用np别名了。PowrShell配置文件位置可以使用$profile命令查询。
想查看当前命令行窗口可以使用的别名,可以进入别名驱动器查看,使用dir alias:就能查看所有能用的别名,也可以使用get-alias命令查看别名。

图7:查看PowerShell别名驱动器
三、管理任务
Windows PowerShell的基本目标是使用户能够以交互方式或通过脚本更好、更容易地对系统进行管理控制,为了达成这个目标,PowerShell提供了大量命令来执行各种管理任务,让用户轻松完成管理系统任务。
1、管理进程
前面已经提过管理系统进程的命令,管理进程常用命令就是get-process命令和stop-process命令,get-process命令获取进程之后可以直接用管道发送给stop-process命令结束进程。比如,关闭之前打开的记事本,可以使用下面的命令很方便的关闭记事本。
get-process -Name notepad | stop-process
2、处理文件和文件夹
PowerShell使用Get-ChildItem获取文件夹中直接包含的所有项,它有系统内置别名dir和ls,使用CMD和BASH的用户均可以轻松上手。如果想查看C:中的文件夹和文件,直接使用dir c:,PowerShell立刻就会列出C:中的文件和文件夹。其它处理文件和文件夹的命令有Copy-Item、New-Item、Remove-Item等,具体用法可以使用get-help然后跟命令名称即可查询。
3、处理系统服务
可以像管理进程一样管理系统服务,Get-Service命令获取服务列表,Stop-Service命令停止服务,Start-Service命令启动服务,Suspend-Service命令挂起服务,Restart-Service命令重启服务,Set-Service服务设置服务属性。如果想一次性启动已经停止的服务,可以使用以下命令:
get-service | where-object {$_.Status -eq "Stopped"} -exclude
wisvc | start-service
这行命名会把除wisvc之外的命令都启动,这只是一个示例,不要在自己电脑使用,启动所有服务会消耗大量系统资源。
4、处理注册表
PowerShell可以非常方便的处理注册表项目,与进程和服务不同的是,PowerShell并未提供专用的注册表命令,而是使用处理文件和文件夹的命令,这并不奇怪,PowerShell为用户提供了注册表驱动器,可以很好的处理注册表项目。由于注册表对系统非常重要,错误处理注册表也许会导致系统出问题,处理注册表,特别是删除注册表项目要非常小心,最好能在处理注册表项目之前先备份要处理的项目。没有管理员权限也能处理部分注册表项目,这与regedit注册表编辑器不同,注册表编辑器必须使用管理员权限打开,然后才能操作项目。

图8:无管理员权限访问HKLM:驱动器
下面的表格列出了访问注册表所需的所有命令。

图9:处理注册表的命令与预定义的注册表驱动器
PowerShell只提供了两个注册表驱动器HKCU:和HKLM:,其中HKLM:是HKEY_LOCAL_MACHINE的缩写,HKCU:是HKEY_CURRENT_USER的缩写,如果想要访问所有注册表驱动器,可以进入Microsoft.PowerShell.Core\Registry::。
5、处理其它任务
PowerShell还可以处理证书、防火墙、appx应用、打印机等任务,篇幅所限,不具体举例。大家可以使用get-command命令查找相关命令。
相关资讯
最新热门应用
非小号交易平台官网安卓版
其它软件292.97MB
下载
币交易所地址
其它软件274.98M
下载
iotx交易所app
其它软件14.54 MB
下载
zt交易所安卓最新版
其它软件273.2 MB
下载
币拓交易所bittok
其它软件288.1 MB
下载
u币交易所平台app
其它软件292.97MB
下载
热币全球交易所app官网版
其它软件287.27 MB
下载
多比交易平台app
其它软件28.28MB
下载
币赢交易所app官网安卓版
其它软件14.78MB
下载
toncoin币交易所安卓版
其它软件48MB
下载