2012-06-22 51 views
3

我试图编写一个非常简短的PowerShell脚本,运行几个命令,管道输出到一个文本文件,然后对关键字进行搜索。与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

我currious为什么您使用WMIC? PS有更好的方式来访问WMI(Get-WMIObject)。它甚至具有特定于使用服务的Getlet(Get-Service)。 – EBGreen

+0

你有没有试过“name,startname”? – Lee

+0

行情不起作用,我相信它在语法上不正确。 – ToastyMallows

回答

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

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

+0

我觉得这个评论比较好,应该接受答案。 –

+0

也'会做的伎俩。它是PowerShell转义字符。 – IGRACH

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。

+0

我使用WMIC,因为我需要找到所有使用“管理员”的位置。我计划获得wmic服务的输出并将其存储到文本文件中。然后从这里搜索管理员单词,并尽可能将整行返回给新文件。 – Jingles177

+0

WMI需要什么信息? “您使用管理员的地点是什么意思?”我可能会进一步帮助你。 –

+0

我只需要看看WMIC运行的是什么名字和启动名。它有点模糊,因为我不知道如何解释我正在尝试做什么。最后,我用一个简单的批处理脚本来运行上面的命令,管道到一个文件,然后解析该文件中的关键字,然后最终将这些信息发送到一个新的文件供以后使用。但是,感谢您的帮助。 – Jingles177

1

使用PowerShell 3.0开始有新的转义操作--%可用(见release notes魔参数):

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