9

我正在尝试编写一个非常简短的 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 使用逗号创建一个数组。有什么想法或建议吗?

谢谢

4

3 回答 3

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

这很容易解决逗号,根本没有变化。

于 2014-09-24T01:23:23.133 回答
7

从 PowerShell 3.0 开始,可以使用新的转义运算符--%(请参阅发行说明中的​​魔术参数):

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

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

于 2015-07-06T22:45:49.517 回答
1

这个问题的答案在于使用 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。

于 2012-06-22T17:49:47.713 回答