【问题标题】:Trouble with powershell commaspowershell逗号问题
【发布时间】:2021-06-04 02:21:58
【问题描述】:

我正在尝试编写一个非常简短的 powershell 脚本,它运行一些命令,将它们的输出通过管道传输到文本文件,然后针对关键字进行搜索。

我不知道该行要改变什么:

wmic service get name, startname | out-File "$pwd\admin\wmic.txt"

WMIC.exe : Invalid GET Expression.
At \\test.ps1:7 char:5
+ wmic <<<<  service get name startname | out-File "$pwd\admin\wmic.txt"
+ CategoryInfo          : NotSpecified: (Invalid GET Expression.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError

我相信错误是由 ',' 产生的,因为 powershell 使用逗号来创建一个数组。 有什么想法或建议吗?

谢谢

【问题讨论】:

  • 我很好奇你为什么使用 WMIC? PS 有更好的方法来访问 WMI (Get-WMIObject)。它甚至还有专门用于处理服务的 cmlet (Get-Service)。
  • 你试过“name, startname”吗?
  • 引号不起作用,我认为它在语法上不正确。
  • 我会试一试EBGreen。对 PS 来说仍然是半新的,并且不知道该 cmdlet。谢谢。

标签: powershell wmic


【解决方案1】:
wmic service get name"," startname| out-File "$pwd\admin\wmic.txt"

这个逗号很容易解析,完全没有变化。

【讨论】:

  • 我认为这个评论更好,应该被接受。
【解决方案2】:

从 PowerShell 3.0 开始,有新的转义运算符 --% 可用(请参阅 release notes 中的 magic 参数):

wmic --% service get name, startname | out-File "$pwd\admin\wmic.txt"

此运算符称为 stop-parsing 运算符,它指示 PowerShell 从该点开始停止将输入解释为 PowerShell 命令或表达式(请参阅文档here)。

【讨论】:

  • 感谢@sevenforce。为了迂腐,一个等效的命令是wmic service get --% name, start name | out-File ...,因为它是逗号和空格开始导致问题
【解决方案3】:

这个问题的答案在于使用 Start-Process cmdlet。这将使命令行参数的解释更加容易,因为您还可以提前构造命令行参数,将它们存储在变量中,然后使用变量名引用它们。

$WmicArgs = 'service get name, startname';
Start-Process -FilePath wmic.exe -ArgumentList $WmicArgs;

但是,你为什么还要使用 WMIC.exe?

使用 WMI 有更简单的方法,例如使用 PowerShell 类型加速器 [wmi]、[wmiclass]、[wmisearcher] 和 Get-WmiObject cmdlet。

【讨论】:

  • 我正在使用 WMIC,因为我需要找到所有使用“管理员”的位置。我计划获取 wmic 服务的输出并将其存储到文本文件中。然后从这里搜索管理员一词,并尽可能将整行返回到新文件。
  • 您究竟需要 WMI 提供哪些信息? “使用管理员的位置”是什么意思?我也许可以进一步帮助你。
  • 我只需要查看 WMIC 运行的名称和起始名称。它有点模糊,因为我不确定如何解释我正在尝试做的事情。我最终使用了一个简单的批处理脚本来运行上述命令,通过管道传输到一个文件,然后解析该文件的关键字,最后将该信息发送到一个新文件以供以后使用。不过感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-04
  • 2019-04-19
  • 2018-10-25
  • 2017-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多