gpt4 book ai didi

java - 无法在 PowerShell 中从 Java 执行 WMI 查询

转载 作者:行者123 更新时间:2023-12-01 13:04:41 25 4
gpt4 key购买 nike

我使用此 Java 代码执行 PowerShell 命令:

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
* Operations for executing Windows Powershell Scripts from Java.
*
* @author Brian Thorne
*/
public class Sample
{

public static void main(String[] args) throws Exception
{
String s = executePSCommand("gwmi Win32_PhysicalMemory | Select Speed");
System.out.println(s);
}

/**
* Executes a Powershell command.
*
* @param command the command
* @return the result as String.
* @throws Exception if an error occurs
*/
public static String executePSCommand(String command) throws Exception
{
String cmd = "cmd /c powershell -ExecutionPolicy RemoteSigned -noprofile -noninteractive " + command;
return exec(cmd);
}

/**
* Executes a Powershell script.
*
* @param scriptFilename the filename of the script
* @param args any arguments to pass to the script
* @return the result as String.
* @throws Exception if an error occurs
*/
public static String executePSScript(String scriptFilename, String args) throws Exception
{
if (!new File(scriptFilename).exists())
throw new Exception("Script file doesn't exist: " + scriptFilename);

String cmd = "cmd /c powershell -ExecutionPolicy RemoteSigned -noprofile -noninteractive -file \"" + scriptFilename + "\"";
if (args != null && args.length() > 0)
cmd += " " + args;
return exec(cmd);
}

/**
* Executes a batch file. If you want to call Powershell from the batch file you need to do it using this syntax: powershell -ExecutionPolicy RemoteSigned -NoProfile
* -NonInteractive -File c:/temp/script.ps1
*
* @param batchFilename the filename of the batch file
* @param params any parameters to pass to the batch file
* @return the result as String.
* @throws Exception if an error occurs
*/
public static String executeBatchFile(String batchFilename, String params) throws Exception
{
if (!new File(batchFilename).exists())
throw new Exception("Batch file doesn't exist: " + batchFilename);

String cmd = "cmd /c \"" + batchFilename + "\"";
if (params != null && params.length() > 0)
cmd += " " + params;
return exec(cmd);
}

private static String exec(String command) throws Exception
{
StringBuilder sbInput = new StringBuilder();
StringBuilder sbError = new StringBuilder();

Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(command);
proc.getOutputStream().close();
InputStream inputstream = proc.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);

String line;
while ((line = bufferedreader.readLine()) != null)
{
sbInput.append(line).append("\n");
}

inputstream = proc.getErrorStream();
inputstreamreader = new InputStreamReader(inputstream);
bufferedreader = new BufferedReader(inputstreamreader);
while ((line = bufferedreader.readLine()) != null)
{
sbError.append(line).append("\n");
}

if (sbError.length() > 0)
throw new Exception("The command [" + command + "] failed to execute!\n\nResult returned:\n" + sbError.toString());

return "The command [" + command + "] executed successfully!\n\nResult returned:\n" + sbInput.toString();
}
}

在 PowerShell 中我可以成功执行此查询:

 gwmi Win32_PhysicalMemory | Select Speed

但是当我使用 Java 代码执行查询时,我得到以下结果:

Exception in thread "main" java.lang.Exception: The command [cmd /c powershell -ExecutionPolicy RemoteSigned -noprofile -noninteractive gwmi Win32_PhysicalMemory | Select Speed] failed to execute!

Result returned:
'Select' is not recognized as an internal or external command,
operable program or batch file.

我认为这个字符就是问题|。有什么办法可以解决这个问题吗?

最佳答案

尝试在命令中添加单个语音标记

String s = executePSCommand("'gwmi Win32_PhysicalMemory | Select Speed'");

或逃离管道

String s = executePSCommand("gwmi Win32_PhysicalMemory \\| Select Speed");

关于java - 无法在 PowerShell 中从 Java 执行 WMI 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23351627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com