PowerShell入门教程之Cmd命令与PowerShell命令相互调用的方法

所属分类: 脚本专栏 / PowerShell 阅读数: 782
收藏 0 赞 0 分享

     单独使用一种脚本来完成一项任务是理想的状态,而现实的情况往往是,因为历史原因、或者团队组成,你不得不将多种脚本或者程序组合在一起,来完成某项任务。本文的讨论范围是Cmd命令与PowerShell命令之间的组合与调用。

     毋庸置疑,Cmd命令与PowerShell命令之间的调用有两个方向。即在Cmd命令中调用PowerShell的命令,以及在PowerShell脚本中调用Cmd命令。需要说明的是,这里的调用分两个层次:一、简单的在其中一个的环境中执行另外一个命令,完成部分工作;二、在其中一个的执行上下文中调用另一个的命令,并根据返回结果来选择后面的逻辑。

在Cmd命令中调用PowerShell命令

如果只是在Cmd命令中调用PowerShell的命令,而不需要记录PowerShell的返回结果,是非常简单的。可以直接在Cmd命令或者脚本中执行类似一下命令:

复制代码 代码如下:

powershell echo "Hello"

执行上述命令的时候,Cmd是把PowerShell当成一个应用程序来执行的。      

在Cmd命令中调用PowerShell的命令并获得返回值的可行方法并不多。这是因为,Cmd命令对于结果的处理往往需要借助于文件读写,很少有机会在各个命令之间传递数据,并保存中间结果的。For命令是其中最好的一个方法,它的指向方法如下:

复制代码 代码如下:

for /f  %i in ('powershell echo "Hello"') do (set a=%i)

以上命令的执行结果是%a%被赋值为Hello。当然,如果只是简单赋值,就没有必要这样大费周折。调用PowerShell的命令,肯定是看中了它强大的编程能力,比如自定义的排序等等。

  我遇到的一个实际的例子是这样的:文件服务器上有一个目录,里边放着一些按年月命名的目录。因为这个目录结构已经确定下来了,而且很多组都在使用,不能随便改动。我们有一个任务就是每天定时去最新的年月目录里拷贝build。麻烦的是,第一、文件夹时按照12.1、12.2。。。12.10、12.11、12.12、13.1。。。这样命名的;第二、从时间上没法找,因为最新的目录不是在月底,而是在月中的某一天生成的。以Cmd命令有限的编程能力,肯定是不好解决这个问题的。我最终写了一个PowerShell的脚本文件,在Cmd的脚本中调用,终于解决了这个问题。

在PowerShell命令中调用Cmd命令

       由于PowerShell强大的管道功能,在PowerShell命令或者脚本中调用Cmd命令并获得返回结果是件很容易的事情,是否获得结果对于调用Cmd命令的方式也没有影响。请看如下示例:

复制代码 代码如下:

cmd /c dir
$a = (cmd /c dir)
$a

以上示例中,第1行的执行结果,和后两行的执行结果是一样的。不同点是,后者的执行结果被保存了下来,前者只是将结果打印在屏幕上。

  为什么需要在PowerShell中调用Cmd命令呢(既然PowerShell有如此强大的Shell以及编程特性)?其实原因也很简单。在PowerShell之前我们有很多很好用的Cmd命令、工具和控制台程序,如果完全丢弃他们并使用PowerShell重写的话,那绝对是浪费。要知道,能够利用最小的改变来高效地完成任务,才是我们的目标。

结语

  一个新的语言,如果不能与已有的资源兼容和沟通,那么它注定不能成为大众的选择(也许可能在小众中流行),最终将被遗弃和忘记。PowerShell与现有系统良好沟通性有目共睹,从它与Cmd命令的关系可见一斑。

更多精彩内容其他人还在看

Windows Powershell Switch 循环

这篇文章主要介绍了Windows Powershell Switch 循环以及PowerShell中数组可以与switch语句结合,产生意想不到的效果。
收藏 0 赞 0 分享

Windows Powershell 定义函数

这篇文章主要介绍了Windows Powershell 定义函数,需要的朋友可以参考下
收藏 0 赞 0 分享

Powershell实现导入安装证书功能脚本分享

这篇文章主要介绍了Powershell实现导入安装证书功能脚本分享,本文用编程方法实现把pfx证书文件导入到指定的库中,需要的朋友可以参考下
收藏 0 赞 0 分享

Powershell改变脚本执行优先权的代码分享

这篇文章主要介绍了Powershell改变脚本执行优先权的代码分享,本文通过控制进程的方式调整程序的执行顺序,需要的朋友可以参考下
收藏 0 赞 0 分享

Powershell读取PFX证书并输入密码的脚本分享

这篇文章主要介绍了Powershell读取PFX证书并输入密码的脚本分享,本文实现直接用脚本输入密码,避免了手动输入密码的麻烦,需要的朋友可以参考下
收藏 0 赞 0 分享

Powershell访问SQL Server数据库代码实例

这篇文章主要介绍了Powershell访问SQL Server数据库代码实例,本文直接给出代码,使用时只需要替换数据库配置参数即可,需要的朋友可以参考下
收藏 0 赞 0 分享

Powershell打印文本文档例子

这篇文章主要介绍了Powershell打印文本文档例子,本文相对简单,默认给出的是打印系统日志文件,使用时要替换成自己想打印的文件,需要的朋友可以参考下
收藏 0 赞 0 分享

Powershell创建简洁的HTML报告例子

这篇文章主要介绍了Powershell创建简洁的HTML报告例子,本文先是讲解了实现的步骤,然后给出了实现代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Powershell在一个会话中只允许执行指定命令的方法

这篇文章主要介绍了Powershell在一个会话中只允许执行指定命令的方法,使用本文的技巧可以达到控制权限的功能,需要的朋友可以参考下
收藏 0 赞 0 分享

Powershell中创建自定义对象例子

这篇文章主要介绍了Powershell中创建自定义对象例子,本文内容需要在3.0版本以上有效,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多