2017-10-06 177 views
0

我正在編寫一個PowerShell腳本,該腳本將按需運行ElasticSearch's Support Diagnostics工具。如何使用PowerShell中的參數運行批處理命令

這是我的代碼: ES.Config.xml - 這是一個xml文件,用於存儲我想從PowerShell運行的診斷命令。它存儲爲一個字符串(見DEV.Diagnostic.ExecuteCommand:

<DEV> 
<Diagnostic FolderPath="" ExecuteCommand="C:\ElasticSearch\support-diagnostics-5.12\diagnostics.bat --host localhost --port 9200 --user elastic -p" /> 

在我的PowerShell腳本我試圖運行命令:

Invoke-Expression -Command $global:DiagnosticCommand 

$全球:DiagnosticCommand是一個全局變量存儲值「C:\ ElasticSearch \ support-diagnostics-5.12 \ diagnostics.bat --host localhost --port 9200 --user elastic -p」

當我運行此命令時,我總是收到錯誤。建議將不勝感激。

+1

**我總是得到一個錯誤... **:什麼樣的錯誤?它來自哪裏?從'powershell'或從[diagnostics.bat](https://github.com/elastic/elasticsearch-support-diagnostics/blob/master/scripts/diagnostics.bat)或從'java'?請[編輯]問題並提供完整的追溯。 – JosefZ

+0

我建議看一下'call'操作符。 – Eris

+0

我一直收到的錯誤如下:錯誤:無法找到或加載主類com.elastic.support.diagnostics.DiagnosticApp。 –

回答

0

我不能確定你要使用這個的上下文,也許幾個例子會幫助下面。我見過兩個關鍵的命令行程序可以幫助你。我把{輸入完整的可執行文件,並在這裏參數}

Start-Process -FilePath C:\Windows\SysWOW64\mstsc.exe -ArgumentList "/?" 
Start-Process -FilePath msiexec.exe -ArgumentList "/?" 

Invoke-Command -ScriptBlock {C:\Windows\SysWOW64\mstsc.exe /?} 
Invoke-Command -ScriptBlock {msiexec.exe /?} 

在你的情況下,並不需要顯式路徑,但你可以指向與任一參數列表或-ScriptBlock參數的完整路徑的例子可以你嘗試以下?

Invoke-Command -ScripBlock{ 
C:\ElasticSearch\support-diagnostics-5.12\diagnostics.bat --host localhost --port 9200 --user elastic -p} 

您可以參考完整的TechNet白皮書兩個命令行開關: https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Management/Start-Process?view=powershell-5.1

https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Core/Invoke-Command?view=powershell-5.1

+0

當我運行腳本時,出現以下錯誤:C:\ ElasticSearch \ support-diagnostics-5.12 \ diagnostics.bat --host localhost --port 9200 --user elastic -p文件夾存在 找到JAVA_HOME,使用C: \ Program Files \ Java \ jre1.8.0_141 錯誤:無法找到或加載主類com.elastic.support.diagnostics.DiagnosticApp,但是當我在它自己的命令窗口中運行此命令時,此運行良好。 –

+0

「無法找到或加載主類com.elastic.support.diagnostics.DiagnosticApp」是Java的錯誤,而我的Java技能不足以爲您提供端到端的故障排除。 Powershell支持創建類,但是它不需要像經典的「public static void main」這樣的方法,所以你必須從Elastic類的角度處理你所遇到的錯誤。 – Talat

相關問題