1 package org.metricshub.winrm;
2
3 /*-
4 * ╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲
5 * WinRM Java Client
6 * ჻჻჻჻჻჻
7 * Copyright 2023 - 2024 Metricshub
8 * ჻჻჻჻჻჻
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
12 *
13 * http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱
21 */
22
23 import java.nio.charset.Charset;
24 import java.util.List;
25 import java.util.Map;
26 import java.util.concurrent.TimeoutException;
27 import org.metricshub.winrm.exceptions.WindowsRemoteException;
28 import org.metricshub.winrm.exceptions.WqlQuerySyntaxException;
29
30 public interface WindowsRemoteExecutor extends AutoCloseable {
31 /**
32 * <p>Execute a WQL query and process its result.</p>
33 *
34 * @param wqlQuery the WQL query (required)
35 * @param timeout Timeout in milliseconds (throws an IllegalArgumentException if negative or zero)
36 *
37 * @return a list of result rows. A result row is a Map(LinkedHashMap to preserve the query order) of
38 * properties/values.
39 *
40 * @throws TimeoutException to notify userName of timeout.
41 * @throws WqlQuerySyntaxException if WQL query syntax is invalid
42 * @throws WindowsRemoteException For any problem encountered
43 */
44 public List<Map<String, Object>> executeWql(final String wqlQuery, final long timeout)
45 throws TimeoutException, WqlQuerySyntaxException, WindowsRemoteException;
46
47 /**
48 * Execute the command on the remote
49 *
50 * @param command The command to execute
51 * @param workingDirectory Path of the directory for the spawned process on the remote system (can be null)
52 * @param charset The charset
53 * @param timeout Timeout in milliseconds
54 *
55 * @return The command result
56 *
57 * @throws WindowsRemoteException For any problem encountered
58 * @throws TimeoutException To notify userName of timeout.
59 */
60 public WindowsRemoteCommandResult executeCommand(
61 final String command,
62 final String workingDirectory,
63 final Charset charset,
64 final long timeout
65 ) throws WindowsRemoteException, TimeoutException;
66
67 /**
68 * Get the hostname.
69 * @return
70 */
71 public String getHostname();
72
73 /**
74 * Get the username.
75 * @return
76 */
77 public String getUsername();
78
79 /**
80 * Get the password.
81 * @return
82 */
83 public char[] getPassword();
84 }