2017-10-06 176 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

相关问题