古黑币0 个
成长值350 点
金币562 个
精华贴0 个
这个用户很懒,还没有填写自我介绍呢~
本帖最后由 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+ l…0 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 个 金币.
|