[英]Java Runtime.exec() not returning PowerShell command output
我正在使用Java調用PowerShell命令,然后捕獲輸出。
我遇到了一個問題,其中一個簡單的PowerShell命令將返回輸出,而另一個則不會,並且我試圖理解原因。
這是邏輯 (已更新為包括對錯誤輸出流的檢查)
public class Example {
private void myMethod(String command) throws IOException {
Process process = Runtime.getRuntime().exec(command);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String output = "";
String line;
while((line = bufferedReader.readLine()) != null){
output += (line + "\n");
}
System.out.println((output.isEmpty() ? "No output was received!!!" : output));
// Also iterate through the error stream to see if it caught anything.
BufferedReader errorBufferedReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String errorOutput = "";
while((line = errorBufferedReader.readLine()) != null){
errorOutput += (line + "\n");
}
System.out.println((errorOutput.isEmpty() ? "Nothing in the error output stream." : errorOutput));
}
public static void main(String[] args) throws IOException {
new Example().myMethod("powershell -Command \"$PSVersionTable\"");
new Example().myMethod("powershell -Command \"Get-Module -Name VMware* -ListAvailable\"");
}
}
這是輸出
Name Value
---- -----
PSVersion 5.0.10586.117
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.10586.117
CLRVersion 4.0.30319.18444
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
Nothing in the error output stream.
No output was received!!!
Nothing in the error output stream.
因此,在Main()
執行的第一個命令返回輸出,但是第二個命令卻沒有,我也不明白為什么。
我可以通過命令提示符手動運行第二個命令,它肯定可以工作。
關於為什么我以編程方式執行第二個命令的輸出時無法檢索到第二個命令的想法?
更新資料
手動運行第二個命令時,這是生成的輸出(以及我期望捕獲的Java代碼)
U:\>powershell -Command "Get-Module -Name VMware* -ListAvailable"
Directory: C:\Program Files\WindowsPowerShell\Modules
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Binary 6.5.1.6... VMware.DeployAutomation {Add-DeployRule, Add-ProxyServer, Add-ScriptBundle, Copy-DeployRule...}
Binary 6.5.1.6... VMware.ImageBuilder {Add-EsxSoftwareDepot, Add-EsxSoftwarePackage, Compare-EsxImageProfile, Export-EsxImageProfile...}
Manifest 6.5.4.7... VMware.PowerCLI
Binary 6.5.4.6... VMware.VimAutomation.Cis.Core {Connect-CisServer, Disconnect-CisServer, Get-CisService}
Binary 6.5.1.5... VMware.VimAutomation.Cloud {Add-CIDatastore, Connect-CIServer, Disconnect-CIServer, Get-Catalog...}
Manifest 6.5.4.6... VMware.VimAutomation.Common
Binary 6.5.2.6... VMware.VimAutomation.Core {Add-PassthroughDevice, Add-VirtualSwitchPhysicalNetworkAdapter, Add-VMHost, Add-VMHostNtpServer...}
Binary 6.5.4.7... VMware.VimAutomation.HA Get-DrmInfo
Binary 7.1.0.5... VMware.VimAutomation.HorizonView {Connect-HVServer, Disconnect-HVServer}
Binary 6.5.1.5... VMware.VimAutomation.License Get-LicenseDataManager
Binary 2.0.0.6... VMware.VimAutomation.Nsxt {Connect-NsxtServer, Disconnect-NsxtServer, Get-NsxtService}
Binary 6.5.1.5... VMware.VimAutomation.PCloud {Connect-PIServer, Disconnect-PIServer, Get-PIComputeInstance, Get-PIDatacenter}
Manifest 1.0.0.5... VMware.VimAutomation.Sdk {Get-PSVersion, Get-InstallPath}
Binary 6.5.1.5... VMware.VimAutomation.Srm {Connect-SrmServer, Disconnect-SrmServer}
Binary 6.5.4.7... VMware.VimAutomation.Storage {Add-KeyManagementServer, Copy-VDisk, Export-SpbmStoragePolicy, Get-KeyManagementServer...}
Script 1.1 VMware.VimAutomation.StorageUtility Update-VmfsDatastore
Binary 6.5.1.5... VMware.VimAutomation.Vds {Add-VDSwitchPhysicalNetworkAdapter, Add-VDSwitchVMHost, Export-VDPortGroup, Export-VDSwitch...}
Binary 6.5.4.7... VMware.VimAutomation.Vmc {Connect-Vmc, Disconnect-Vmc, Get-VmcService, Connect-VmcServer...}
Binary 6.5.1.5... VMware.VimAutomation.vROps {Connect-OMServer, Disconnect-OMServer, Get-OMAlert, Get-OMAlertDefinition...}
Binary 6.5.1.5... VMware.VumAutomation {Add-EntityBaseline, Copy-Patch, Get-Baseline, Get-Compliance...}
所以我弄清楚了這里發生了什么。
快速回顧問題::
發生這種情況的原因::
通過32位Powershell安裝VMware模塊之后,我的Java程序(在32位上下文中運行)開始按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.