主题 : 强大到没朋友,Win10 PowerShell简介(3)
千山同一月 万户尽皆春 千江有水千江月 万里无云万里天
级别: 总版主

UID: 998
精华: 0
发帖: 605014
威望: 528866 点
无痕币: 12 WHB
贡献值: 0 点
在线时间: 62029(时)
注册时间: 2008-12-25
最后登录: 2024-04-18

0 强大到没朋友,Win10 PowerShell简介(3)

此前IT之家已经介绍了两篇《强大到没朋友,Win10 PowerShell简介》系列(请看简介1简介2)文章,今天IT之家网友带来第三篇了解文章。
五、外部命令
Windows有着令人惊叹的兼容性,这是Unix系统和各种类Unix系统望尘莫及地方,PoweShell也几乎兼容一切已经存在的命令,这也是PowerShell强大的地方之一。与CMD一样,PowerShell可以很容易调用并执行外部命令,CMD自带的命令也包括在内,而且可以Powershell提示符中启动图形界面的Windows程序(比如如记事本),并且可以捕获Windows程序生成的文本,并在PowerShell中使用该文本。
1、执行外部命令
在PowerShell诞生之前,Windows平台上就已经有许多程序员创建了数量巨大的实用命令,有些命令甚至在DOS操作系统时代就已经存在了,Windows很好的继承了下来,这是一笔巨大的宝贵财富,抛弃这些命令是十分不明智的。由于PowerShell命令有“动词-名词”结构组成,虽然使命令变得简单易懂,但也使命令变得很长,部分命令有别名也无济于事,毕竟不是所有命令都有别名,更不可能为每一个命令创建一个别名。
有些PowerShell命令的功能和某些外部命令的功能是差不多,但通常外部命令比PowerShell自带命令要短得多,所以在PowerShell命令窗口中输入命令时,多使用与自带命令功能相同的外部命令要大大的减少了输入文字的数量,减轻手指负担。
例如,使用频率非常高的清屏命令,在CMD中是cls,在PowerShell中是Clear-Host,可以看到,Clear-Host明显比cls长得多,好在微软已经把cls作为Clear-Host的内置别名了,所以CMD和PowerShell都可以用cls来清屏。又比如,ping在CMD中也是使用频率非常高的命令,在判断网络故障时非常有用,在PowerShell中没有对应的命令,有一个功能差不多的Test-Connection命令,他们都是用来判断网络连通性的命令,ping却比Test-Connection的长度短得多,可以为Test-Connection创建一个简短的别名,也可以直接在PowerShell提示符窗口中直接使用ping命令,反正它们功能差不多。
下面测试一下我和IT之家的网络距离吧,大家顺便看看Ping命令和Test-Connection命令的不同之处

图1:在PowerShell中执行ping命令测试网络连通性

图2:用Test-Connection命令测试网络连通性
2、执行外部命令要注意的地方
外部命令毕竟不是PowerShell亲儿子,有时执行外部命令时会遇到一些问题,可是会使大家困惑,接下来我为大家说明一下执行外部命令要注意的地方,只要看完,就知道那些问题都不是个事儿。
通常遇到的问题都是外部命令的名称与内置别名相冲突,或者命令的语法与PowerShell语法不同造成的,解决方法也很简单,名称冲突就用完整的名称,语法冲突就用PowerShell的语法,要不就干脆使用具有相同功能的PowerShell命令。
例如,sc在CMD是常用的服务有关命令,sc在PowerShell是命令Set-Content的别名,在PowerShell中使用sc会被认为是Set-Content命令,这时只要输入完整的sc.exe命令,就能在PowerShell中正常运行了。如果想用sc命令查询Spooler服务的状态,Spooler是打印机服务,首先执行sc query Spooler,没有任何输出,这是因为PowerShell把sc当作Set-Content命令的别名了,之后我执行sc.exe query Spooler,就正常了。

图3:使用sc命令查询Spooler服务
有时我们从网络中下载一些命令行程序,比如著名的下载工具curl命令,可以通过PowerShell执行,明明是很简单的事情,PowerShell偏偏就不把它做好,这里我用软媒魔方(广告费,谢谢)做个演示。假设我的电脑之前蓝屏了,我想用软媒蓝屏助手查看原因,于是在PowerShell命令窗口中输入bsodhelper.exe,然后PowerShell就报个错,好像是不想执行它,敢罢工,信不信我一口盐汽水喷死你!

图4:打开bsodhelper.exe报错
CMD就从来不会有这种破事,PowerShell为什么这么麻烦?之所以会报这个错误,绝对不是微软吃饱了撑的,是为了用户安全,想想看,为了破解某个软件,从网上下载一个命令行破解工具,浏览器不让下载,就先找教程关了SmartScreen,下完后被Windows Defender秒删,一气之下接着找教程把Windows Defender干掉,费劲千辛万苦终于把破解工具下载下来了,CMD立刻就能执行,PowerShell却能让你犹豫一下,尽管可能最后你成功执行了并破解了某软件,但是电脑却中毒了,于是去网上发帖“Windows垃圾,Windows太不安全了,下个软件就能中毒,苹果系统才是世上最好的系统”。相信我,这种人不但有,还绝非少数。
废话了这么多,说说怎么才能执行这个bsodhelper.exe,很简单在输入bsodhelper.exe之前,先输入一个半角的“.”,然后打个同样是半角的“\”,“/”也行,反正PowerShell都认,正确输入方式:
.\bsodhelper.exe
当然还有一种办法,就是把这个文件的完整的绝对路径输进去,比如我把bsodhelper.exe放在c:\PCMaster下,就直接输入:
c:\PCMaster\bsodhelper.exe
如果以后每次都想执行这个命令,那就请把命令所在的路径添加到系统环境变量,就不细说了。
级别: 九滴秋露

UID: 103037
精华: 0
发帖: 15202
威望: 97907 点
无痕币: 5 WHB
贡献值: 0 点
在线时间: 6631(时)
注册时间: 2010-09-22
最后登录: 2024-03-19

了解一下看看了。
级别: 十方秋水

UID: 26730
精华: 0
发帖: 64722
威望: 148036 点
无痕币: 183 WHB
贡献值: 0 点
在线时间: 11530(时)
注册时间: 2008-05-03
最后登录: 2018-05-16

学习一下了
Total 1.026551(s) query 5, Time now is:04-18 11:55, Gzip enabled 粤ICP备07514325号-1
Powered by PHPWind v7.3.2 Certificate Code © 2003-13 秋无痕论坛