我尝试使用java Process类执行下面的命令,但它没有给我任何响应,也没有它应该做的效果。
但是当我直接在PowerShell上执行这个命令时,它工作正常,只是它不能使用java代码。我试过其他PowerShell命令,所有的命令都工作正常,接受这个命令。
这是一个禁用驱动器索引的命令。
输出其唯一的打印命令,并在响应isAlive()方法调用时返回false。
命令:powershell.exe Get-WmiObject -Class Win32_Volume -Filter "DriveLetter='I:'" | Set-WmiInstance -Arguments @{IndexingEnabled=$False}
活动:假
代码中没有其他内容,我只是从我的主类中调用此方法,就像classObject.disableIndexing("D")
注意我只使用管理员权限执行相同的操作。请帮助。
public String disableIndexing(String driveLetter) {
String returnVal="";
String command = "powershell.exe Get-WmiObject -Class Win32_Volume -Filter \"DriveLetter='"+driveLetter+":'\" | Set-WmiInstance -Arguments @{IndexingEnabled=$False} ";
try {
System.out.println(command);
Process p = Runtime.getRuntime().exec(command);
p.waitFor();
String line1="";
String line="";
BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line1 = br.readLine()) != null) {
System.out.println(line1);
if(!line1.isEmpty())
System.err.println(line1);
}
System.out.println(p.isAlive());
if(p.exitValue()==0) {
returnVal="Indexing changed Successfully";
}else {
returnVal="Your Drive is Not Responding Try After Some Time";
}
}catch(Exception e) {
e.printStackTrace();
}
return returnVal;
}
1条答案
按热度按时间bgtovc5b1#
这里的问题可能是
|
在传递到powershell.exe
之前被默认shell(例如cmd.exe)解释。要解决此问题,请使用
-EncodedCommand
命令行开关将命令安全地传递给powershell.exe
: