【问题标题】:Executing CMD Command from a PowerShell Script从 PowerShell 脚本执行 CMD 命令
【发布时间】:2018-10-04 15:51:00
【问题描述】:

我见过很多类似的问题,但没有一个与从 PS 脚本 (.ps1) 执行 CMD 命令(例如 ipconfig)有关。

如果您在 PS 控制台上键入这些命令,它们可以正常工作,但一旦在脚本上它们就不行,您可以在下面看到一个示例:

PS C:\Users\TestQro> adb 设备 附加设备列表 PS C:\Users\TestQro> adb 设备 | Select-String -Quiet 列表 真的

返回 True,因为 Select-String 在命令“adb devices”的响应中找到了单词“List”,这是预期的行为。但是,如果我将相同的命令放入 .ps1 脚本文件中,PS 会在运行时回答:

PS C:\TesterInfo> ./TunnerApp.ps1 命令管道位置 1 处的 cmdlet 写入输出 为以下参数提供值: InputObject[0]:

我应该如何在脚本中输入正常的 CMD 命令? 为什么它在等待脚本上的参数,但在控制台中却可以正常工作?

【问题讨论】:

  • 有关无效代码的帮助:显示无效代码。
  • 您好,感谢您的帮助。代码只有这一行:“adb devices | select-string -Quiet List”
  • 然后请尝试从 CMD 窗口 (powershell.exe -NoExit -NoProfile) 启动一个干净的 PowerShell 实例并从那里运行脚本。你仍然得到同样的提示吗?

标签: powershell windows-scripting


【解决方案1】:

根据您那里的输出

PS C:\TesterInfo> ./TunnerApp.ps1

cmdlet Write-Output at command pipeline position 1
Supply values for the following parameters: InputObject[0]:

您的 PowerShell 脚本中的某处似乎有一个 Write-Output 语句,该语句没有任何输入。在某处寻找空的Write-Output 语句

【讨论】:

  • 您好,感谢您的帮助,但脚本中的唯一行与您在控制台中看到的相同,所以我不知道为什么脚本中需要该参数而不是在键入时需要该参数:adb devices | select-string -Quiet List
  • @JorgeAlbertoDiaz 我明白了,也许可以尝试将 adb 设备输出到文件并获取该文件的输出并搜索您的值。 adb devices > C:\temp\adb.txt $devices = Get-Content C:\temp\adb.txt
【解决方案2】:

您所说的CMD 命令 实际上是WindowsSystem32 文件夹(或其他一些PATH 环境变量路径)中的可执行文件。因此,您可以像调用任何可执行文件一样调用它们,使用 调用运算符

& "$Env:SystemRoot\System32\IPCONFIG.exe"

about_Operators

【讨论】:

  • 只要文件名或路径中没有空格,就可以在不使用调用运算符的情况下将外部命令作为裸词调用。 ipconfig& ipconfig& "ipconfig" 都应该这样做。
猜你喜欢
  • 2021-09-13
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多