XX什么的,最讨厌了! 收藏本站
登陆 / 注册 搜索

阅读: 6.4K   回复: 5

[# 系统基础] PowerShell入门(二):PowerShell是Cmd命令行的加强版吗?(转)

soarcloud 「龙战于野」 2016-7-28 11:08 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

本帖最后由 soarcloud 于 2016-8-2 21:20 编辑 + ]/ U( O, p3 S. Y. n! A' {

/ b, U' k% m$ j  R: x6 G  PowerShell是命令行的加强版吗?PowerShell能执行命令行的所有命令吗?PowerShell要替代命令行?这三个问题的答案足以让我们了解PowerShell与Cmd命令行之间的关系。让我们慢慢道来。。。
% L; k& {+ [& W9 Z3 R% d
3 f" B, q5 {( @+ dPowerShell中的命令
5 m( Q$ j) n& O+ L" O* J  启动PowerShell,在其中输入几个常用的Cmd命令. t# A7 l9 s. |4 t% w
5 i+ D+ R4 U# p; l+ S
PS D:\Projects\Practise\PowerShell> dir
, G' `) a5 y+ t" \    Directory: D:\Projects\Practise\PowerShell
/ O. t" m& S3 Y( S* m! bMode                LastWriteTime     Length Name + _* d' n0 Z8 {  l
----                -------------     ------ ---- - h0 v& J) p( E* ~; A+ v$ V
d----         1/23/2013  12:35 PM            d1 + A4 E4 z+ A! x. w# p  t
d----         1/23/2013  12:35 PM            d2 6 |5 v5 S- w% I( k6 z$ }# k/ P/ \
-a---         1/21/2013   8:38 PM      36314 alias.txt
4 v8 W0 O+ \7 ]-a---         1/21/2013   8:32 PM     241530 cmdlets.txt! }4 p6 _5 L4 q2 }  H  d! O

9 @1 D5 Q3 a  [/ a0 r- m, }$ X或者. v' s" V# O9 x& P2 ~
; I1 _" V% J6 X" k9 y' S8 o- {1 f
PS D:\Projects\Practise\PowerShell> cd .. 1 X/ x; S2 X" r8 @1 O* t/ V
PS D:\Projects\Practise>
2 ?) C, Z# a% [
$ q3 |+ G: W2 a' Y4 o  结果跟我们的预期是差不多。不过,我们是否就能据此说PowerShell就是PowerShell是命令行的加强版吗?再试试下面这个命令:
* ~# e) v) f( X% K8 Q& t9 D# T/ F" x! d, Z
PS D:\Projects\Practise\PowerShell> dir /ad ! P/ ]! y# `1 U$ \6 g* Y
dir : Cannot find path 'D:\ad' because it does not exist.% ?' t5 }# [% g# t% R# J# T
# l0 S" g" N; U, Z( f
+ }' K5 O" L+ X: d/ G- A9 ]' G, u

' x7 v; U7 P; F% m  这个跟我们的期望相去甚远。在Cmd中,它应该输出当前位置的子文件夹的信息,但是这里,它似乎理解不了我们的参数。下面这个命令也是一样:& L# G3 T3 y* I: K) }- ]
. }. ?2 i$ E5 @9 \8 E  y
PS D:\Projects\Practise\PowerShell> fc .\alias.txt .\cmdlets.txt
$ s* E7 m2 _$ Z. u; j8 x& JFormat-Custom : A positional parameter cannot be found that accepts argument '.\cmdlets.txt'.
2 ]5 x# {! [0 e4 }
! P6 _2 z1 C1 \$ ^: `7 c# B6 s3 \/ u

+ X. \, l) @8 G( }& {3 v( `  我本来想要调用比较两个文件的fc命令,结果它却理解成了Format-Custom,牛头不对马嘴。这是怎么回事儿呢?到这里我们就可以回答前两个问题了:PowerShell不能执行Cmd命令行的所有命令,确切地说,PowerShell不能执行任何Cmd命令,至少不能直接执行。这是因为,PowerShell不是Cmd的新版本或者加强版什么的,只是它的有些命令从长相到功能都跟Cmd命令很相似而已。
/ q. w. ]9 u# g' M5 F# Y- c, B% O& D5 Z& M
PowerShell与Cmd命令行的关系
% S0 M8 `# X( Q4 X  PowerShell可以做为一个应用程序在Cmd中运行,其运行方式有点像在Cmd中运行SQLCmd或者Nslookup,在没有明确exit退出之前,一直是应用程序的运行环境,一切的输入,包括命令和数据,都由应用程序来接受和处理。
% H! @1 F" \; s6 ]0 n0 L5 q. `3 G+ c% h
# i2 f5 t8 x2 E% qD:\Projects\Practise\PowerShell>powershell
* i6 ~# `" U6 g, Q; f7 WWindows PowerShell
. n+ t$ D, u2 W$ `% k  mCopyright (C) 2012 Microsoft Corporation. All rights reserved., C, b# i& H& H8 F, A1 L
' h6 L4 m$ ?7 K" d0 {
PS D:\Projects\Practise\PowerShell> get-help
- @0 i0 ]# w, a, b6 f
: M8 y7 S& u: ~- rTOPIC
! A9 X. b) C% E- r  J; I1 B: C    Windows PowerShell Help System# W  f$ `( \) K3 N/ g1 V0 B  X' N

8 G. `+ g  ?7 q: I2 m$ u5 t. Q8 w2 k7 I7 l" q) ?
6 F7 a1 v  D7 S2 @& h/ \4 u
Cmd也可以在PowerShell中作为应用程序运行,其运行方式与在Cmd中运行PowerShell相似:
/ V& t$ r0 o7 o, S( `' O0 m
8 Q8 v3 U% S/ l4 A" l2 O$ ePS D:\Projects\Practise\PowerShell> cmd
" Q8 e5 q, `+ h4 v' V. L; ~+ j! dMicrosoft Windows [Version 6.2.9200]
' }6 X+ s! q' r  |( D(c) 2012 Microsoft Corporation. All rights reserved.
& y" d# [0 ]" a3 V  v7 ^
  {' r/ q) v) ?1 ~( [D:\Projects\Practise\PowerShell>dir /ad
4 M+ n* z' d% |0 J* S1 R/ z+ TVolume in drive D is Doc
) r! ?" b. w  J! {Volume Serial Number is A6C5-E7CE" c1 \2 N) H3 e/ f$ l$ ]

0 x7 O: t' e: v' V* N' zDirectory of D:\Projects\Practise\PowerShell
4 e! C3 A" R& g( K- J' o3 E4 ~3 N& x
01/30/2013  04:54 PM    <DIR>          . " R0 L6 E1 v& ~1 O0 d- x/ r: k# P
01/30/2013  04:54 PM    <DIR>          ..
& ~$ y' u0 U: \  A+ l01/23/2013  12:35 PM    <DIR>          d1 7 L+ o4 g9 K% u5 s
01/23/2013  12:35 PM    <DIR>          d22 r* g5 j  a& }6 i5 q

% d% ^8 U" X: T" z  t% G+ l0 M' ?9 v) K. B* r4 p) R

4 q( r3 a, B- M4 q4 Q  PowerShell通过Alias这个特性,可以让使用者以Cmd风格来使用PowerShell命令。这样做的好处是让用户在刚接触PowerShell的时候,就像在使用Cmd一样亲切、熟悉。坏处是,让人容易把PowerShell和Cmd搞混了。不过当你了解了Alias的概念和Get-Alias命令以后,这个问题将迎刃而解:
* n! V8 g: K7 F, C9 e' S/ c0 r# e! @- ^1 D$ C( N; }2 x
PS D:\Projects\Practise\PowerShell> get-alias dir, echo, type
" @* Y* s1 N& d7 w7 ^/ x; _/ ]) {9 A6 L; f+ ~$ O  _; U
CommandType     Name                                               ModuleName
+ O. V) g; u9 f-----------     ----                                               ----------
6 B$ E6 u, S+ ~3 A1 g1 ^0 R  Z0 a7 BAlias           dir -> Get-ChildItem % r( R5 Q) Z7 @! S4 ]3 u6 [- O9 [" r

5 L7 A2 V% M" {6 l% z0 i7 lAlias           cd -> Set-Location
3 Y  d+ v1 J: v4 r; y3 WAlias           echo -> Write-Output
( ?0 p, q+ h' w9 t4 d; l& ~- z* c/ P9 C; V% [
  就是说dir实际上是PowerShell的Get-ChildItem命令的一个别名,cd是Set-Location的别名。。。到这里PowerShell和Cmd的关系问题算是解决了。
6 ~4 c! x) u6 `1 d1 |- I; s4 Z2 L) g" `$ I
Cmd命令行会被PowerShell替代吗?! @2 c9 a1 u2 p5 n; f
  我其实一直以来都很讨厌类似“谁不如谁好”、“谁要代替谁”的问题,放到这里也一样,新的东西必然有它的优越性,旧的东西也有一票粉丝。从现在PowerShell被接受的程度来看,短时间内Cmd不会被PowerShell替代。长远来看呢,谁知道呢。我只知道,多一份选择就多一份自由,多一种可能性{:4_114:}
. h* U. ?) m6 ?# A$ ]( ~$ J, f
2 n0 Z9 z% w8 g7 p
上一篇
下一篇
soarcloud在论坛瞎逛,捡到 2 个 金币.

深蓝 炉火纯青 2016-7-28 12:31 来自手机 |显示全部楼层

一个男人没有丰富的面部表情,不代表他没有丰富的内心世界。

赞助会员
然而我不会ಠ~ಠ
清风霁月 「出类拔萃」 2017-9-9 10:52 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

佩服佩服!#j325:
渡年 「出类拔萃」 2018-5-1 11:55 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

高手云集 果断围观#j327:
锁上的光 「出类拔萃」 2018-5-3 17:39 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

我可以把我的眉毛摘下来,
3 U! Y4 K- Y6 |' T8 J! K0 X0 L   (・ิω・)ノิิ摘下,
" ?9 |8 X! @' M2 m   (・ิω・ิ)安上,! h. L$ @/ y& _' o# b" K7 S& ?( x
   (・ิω・)ノิิ摘下,
$ T% I5 Q! Z9 X9 x( L
4 _4 q, \/ C0 P   (・ิω・ิ)安上,
; h8 A' D9 x1 f8 }$ U8 _! T  ╰ิิ(・ω・)ノิิ两边都摘下,
( a9 G. O' }" ^$ z! p1 Y   (・ิω・ิ)安上。。。& Z1 v5 S4 l2 r
  ╰ิิ(・ω・)ノิิ两边都摘下,
& A1 Z" F. }5 P+ N* O        (・ω・)卧槽。安不回来了。。。 / X6 W( F; r$ @. n: h+ b& C+ Y
楼主你以为我看不出来你是在骗回复吗?我在卖萌而已...#y396:
您需要登录后才可以回帖 登录 | 免费注册  

本版积分规则

快速回复 返回列表