• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >PowerShell > PowerShell中运行CMD命令的技巧总结(解决名称冲突和特殊字符等问题)

PowerShell中运行CMD命令的技巧总结(解决名称冲突和特殊字符等问题)

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了powershell和cmd,powershell和cmd区别,powershell替换cmd,powershell命令,powershell命令大全等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

引言

我从老旧的 CMD.EXE 命令行换到优秀的 POWSERSHELL.EXE 已经有一段时间啦。您可能知道新的 Windows PowerShell 可以运行任何旧命令。不过有些旧命令的名称或语法可能会产生问题。但这都不是事儿。

麻烦 1:名称冲突

PowerShell 的 cmdlet 别名和旧命令的名称有冲突是个常见的问题。比如说您喜欢的服务控制命令 SC.EXE。SC.EXE 非常灵活!我能理解您为什么喜欢它(不要为用 NET.EXE 管理服务找借口)。如果您想查看 SMB Server 服务的状态,可以在 CMD.EXE 里这样用:

SERVICE_NAME: LANMANSERVER
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 4 RUNNING
(STOPPABLE, PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0</div>
如果您在 PowerShell 中尝试同样的事,会得到:

因为 SC 是 Set-Content 的别名。它优先于 SC.EXE 文件。

方案 1A:使用 .EXE 扩展名

为了克服这个问题,您可以简单地将 .EXE 扩展名包含进旧命令。这消除了歧义并使相同的命令在 CMD.EXE 和 PowerShell 里都能用。还可以清楚告诉使用您脚本的人这里用的是旧 .EXE 命令而非 PowerShell 别名。

SERVICE_NAME: LANMANSERVER
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 4 RUNNING
(STOPPABLE, PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0</div>

方案 1B:使用 CMD /C

另一个办法是把您的命令用引号括起让 CMD.EXE 来运行。但这样做没啥效率,仅仅为了执行您的命令就得运行一个 CMD.EXE 实例。

SERVICE_NAME: LANMANSERVER
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 4 RUNNING
(STOPPABLE, PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0</div>

方案 1C:用等效的 PowerShell

很多情况下,可以用 PowerShell cmdlet 来代替您的旧命令。
例如这里您就可以直接使用 Get-Service:

Name : LANMANSERVER
DisplayName : Server
Status : Running
DependentServices : {Browser}
ServicesDependedOn : {SamSS, Srv}
CanPauseAndContinue : True
CanShutdown : False
CanStop : True
ServiceType : Win32ShareProcess</div>


麻烦 2:PowerShell 的特殊字符

有时旧命令的参数使用的字符在 PowerShell 里有特殊意义。
比如您想让某个目录被所有用户完全控制。在 CMD.EXE 里您可以这样做:

这个问题是因为括号和美元符在 PowerShell 中都有特殊意义。例如大括号之类常用字符也会引发相似的冲突。也有几种不同的方案来解决这个问题。

方案 2A:使用 CMD /C

和第一个问题一样,你可以引号括起您的命令交给 CMD.EXE 来处理。先不考虑效率,PowerShell 不会去解析引号里的字符串,这样就能正常工作。

方案 2B:使用 PowerShell 的转义字符

对于这个方案,您必须先知道使用的字符哪些对 PowerShell 有特殊意义。然后在它们每一个前面加上个反引号(`),它就是 PowerShell 的转义字符。这个方案的主要问题是你必须知道哪些字符需要转义,这让读写您的脚本更困难。
我们的例子里,你需要处理 ( 和 ) 这两个字符:

在 PowerShell v3 中有另一种选择来解决这个问题。您只需在命令行的任意位置添加 –% 序列(两个短划线和一个百分号)PowerShell 就不会再去解析剩下的部分。
我们的例子里,您可以这样用:

您可能想查找下面的文章:

  • 浅谈CMD和win powershell的区别
  • 在cmd中直接运行PowerShell脚本文件的方法
  • PowerShell入门教程之Cmd命令与PowerShell命令相互调用的方法
  • PowerShell入门教程之PowerShell和Cmd命令行的关系?
  • PowerShell中运行CMD命令的技巧总结(解决名称冲突和特殊字符等问题)

相关文章

  • Powershell小技巧之非相同域或信任域也能远程
  • PowerShell中运行CMD命令的技巧总结(解决名称冲突和特殊字符等问题)
  • PowerShell函数参数用星号隐藏的方法
  • Powershell中请求WebServices并以JSON格式输出结果
  • PowerShell一次打开多个文件的方法
  • PowerShell函数一次返回多个返回值示例
  • PowerShell启用winrm失败:拒绝访问 0x80070005 -2147024891
  • Powershell小技巧之找出脚本中的错误
  • Windows Powershell 管道和重定向
  • Powershell获取图片名字、文件夹及拍摄时间的例子

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • PowerShell实现测试端口可用性脚本分享
    • PowerShell函数参数用星号隐藏的方法
    • PowerShell Out-File指定文件编码的方法
    • PowerShell一次打开多个文件的方法
    • Powershell实现监测服务器连通状态
    • PowerShell函数参数指定数据类型实例
    • 探索PowerShell(五) PowerShell基础知识
    • PowerShell中使用Out-String命令把对象转换成字符串输出的例子
    • Powershell ISE的抽象语法树编程示例
    • PowerShell中的加法运算详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有