当前位置: 首页 > 编程笔记 >

PowerShell入门教程之PowerShell和Cmd命令行的关系?

谢锦程
2023-03-14
本文向大家介绍PowerShell入门教程之PowerShell和Cmd命令行的关系?,包括了PowerShell入门教程之PowerShell和Cmd命令行的关系?的使用技巧和注意事项,需要的朋友参考一下

PowerShell是命令行的加强版吗?PowerShell能执行命令行的所有命令吗?PowerShell要替代命令行?这三个问题的答案足以让我们了解PowerShell与Cmd命令行之间的关系。让我们慢慢道来。。。

PowerShell中的CMD命令

启动PowerShell,在其中输入几个常用的Cmd命令


PS D:\Projects\Practise\PowerShell> dir 

    Directory: D:\Projects\Practise\PowerShell 

Mode                LastWriteTime     Length Name 

----                -------------     ------ ---- 

d----         1/23/2013  12:35 PM            d1 

d----         1/23/2013  12:35 PM            d2 

-a---         1/21/2013   8:38 PM      36314 alias.txt 

-a---         1/21/2013   8:32 PM     241530 cmdlets.txt


或者

PS D:\Projects\Practise\PowerShell> cd .. 

PS D:\Projects\Practise>


结果跟我们的预期是差不多。不过,我们是否就能据此说PowerShell就是PowerShell是命令行的加强版吗?再试试下面这个命令:

PS D:\Projects\Practise\PowerShell> dir /ad 

dir : Cannot find path 'D:\ad' because it does not exist.

这个跟我们的期望相去甚远。在Cmd中,它应该输出当前位置的子文件夹的信息,但是这里,它似乎理解不了我们的参数。下面这个命令也是一样:


PS D:\Projects\Practise\PowerShell> fc .\alias.txt .\cmdlets.txt 

Format-Custom : A positional parameter cannot be found that accepts argument '.\cmdlets.txt'.

我本来想要调用比较两个文件的fc命令,结果它却理解成了Format-Custom,牛头不对马嘴。这是怎么回事儿呢?到这里我们就可以回答前两个问题了:PowerShell不能执行Cmd命令行的所有命令,确切地说,PowerShell不能执行任何Cmd命令,至少不能直接执行。这是因为,PowerShell不是Cmd的新版本或者加强版什么的,只是它的有些命令从长相到功能都跟Cmd命令很相似而已。

PowerShell与Cmd命令行的关系

  PowerShell可以做为一个应用程序在Cmd中运行,其运行方式有点像在Cmd中运行SQLCmd或者Nslookup,在没有明确exit退出之前,一直是应用程序的运行环境,一切的输入,包括命令和数据,都由应用程序来接受和处理。


D:\Projects\Practise\PowerShell>powershell 

Windows PowerShell 

Copyright (C) 2012 Microsoft Corporation. All rights reserved.

PS D:\Projects\Practise\PowerShell> get-help

TOPIC     Windows PowerShell Help System

Cmd也可以在PowerShell中作为应用程序运行,其运行方式与在Cmd中运行PowerShell相似:


PS D:\Projects\Practise\PowerShell> cmd 

Microsoft Windows [Version 6.2.9200] 

(c) 2012 Microsoft Corporation. All rights reserved.

D:\Projects\Practise\PowerShell>dir /ad Volume in drive D is Doc Volume Serial Number is A6C5-E7CE

Directory of D:\Projects\Practise\PowerShell

01/30/2013  04:54 PM    <DIR>          . 01/30/2013  04:54 PM    <DIR>          .. 01/23/2013  12:35 PM    <DIR>          d1 01/23/2013  12:35 PM    <DIR>          d2

PowerShell通过Alias这个特性,可以让使用者以Cmd风格来使用PowerShell命令。这样做的好处是让用户在刚接触PowerShell的时候,就像在使用Cmd一样亲切、熟悉。坏处是,让人容易把PowerShell和Cmd搞混了。不过当你了解了Alias的概念和Get-Alias命令以后,这个问题将迎刃而解:


PS D:\Projects\Practise\PowerShell> get-alias dir, echo, type

CommandType     Name                                               ModuleName -----------     ----                                               ---------- Alias           dir -> Get-ChildItem

Alias           cd -> Set-Location Alias           echo -> Write-Output

就是说dir实际上是PowerShell的Get-ChildItem命令的一个别名,cd是Set-Location的别名。。。到这里PowerShell和Cmd的关系问题算是解决了。

Cmd命令行会被PowerShell替代吗?

  我其实一直以来都很讨厌类似“谁不如谁好”、“谁要代替谁”的问题,放到这里也一样,新的东西必然有它的优越性,旧的东西也有一票粉丝。从现在PowerShell被接受的程度来看,短时间内Cmd不会被PowerShell替代。长远来看呢,谁知道呢。我只知道,多一份选择就多一份自由,多一种可能性。

 类似资料:
  • 本文向大家介绍PowerShell入门教程之Cmd命令与PowerShell命令相互调用的方法,包括了PowerShell入门教程之Cmd命令与PowerShell命令相互调用的方法的使用技巧和注意事项,需要的朋友参考一下      单独使用一种脚本来完成一项任务是理想的状态,而现实的情况往往是,因为历史原因、或者团队组成,你不得不将多种脚本或者程序组合在一起,来完成某项任务。本文的讨论范围是Cm

  • 本文向大家介绍PowerShell入门教程之PowerShell有什么用?,包括了PowerShell入门教程之PowerShell有什么用?的使用技巧和注意事项,需要的朋友参考一下 PowerShell能干什么呢?就像序言中提到的那样,PowerShell首先是个Shell,定义好了一堆命令与操作系统,特别是与文件系统交互,能够启动应用程序,甚至操纵应用程序;第二,PowerShell允许将几个

  • 本文向大家介绍PowerShell入门教程之PowerShell管道介绍,包括了PowerShell入门教程之PowerShell管道介绍的使用技巧和注意事项,需要的朋友参考一下 管道对于Shell来说是个化腐朽为神奇的东西,它极大地提高了在命令行上编程的能力。深入理解并熟练使用管道是PowerShell高手之路的必经阶段。没有管道,我们就不得不通过许多的变量来保存中间结果,虽然这是脚本和其他编译

  • 本文向大家介绍PowerShell入门教程之远程操作运行PowerShell的方法,包括了PowerShell入门教程之远程操作运行PowerShell的方法的使用技巧和注意事项,需要的朋友参考一下 PowerShell远程操作是远程管理的基础,它为集中管理分布式系统提供了又一种可靠、高效的方法。   一般来说PowerShell远程操作依赖于远程处理基础结构,但为数不多的几个自身具有远程处理能力

  • 本文向大家介绍PowerShell入门教程之快速学习PowerShell的几个方法,包括了PowerShell入门教程之快速学习PowerShell的几个方法的使用技巧和注意事项,需要的朋友参考一下 如何快速地掌握PowerShell呢?总的来说,就是要尽可能多的使用它,就像那句谚语说的:Practice makes perfect。当然这里还有一些原则和方法让我们可以遵循。 有效利用交互式环境

  • 无论出于什么原因,当我试图调用我正在编写的C#程序时,我试图在命令行中用“--”传递两个参数,PowerShell不会用我的命令行调用该程序。 例如,我提供命令行: 为什么会这样? 顺便说一句,如果我把它叫做: 它像预期的那样工作。 似乎没有帮助。 我之所以认为这是PowerShell的怪异之处,是因为如果我从cmd.exe运行相同的命令行,一切都会像预期的那样工作。