2012-06-22 75 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"