当我尝试从CMD手动连接并运行PowerShell脚本时,我可以这样做,但是当我尝试在我的Java代码中执行相同的操作时会显示错误,我的连接代码是:
String command = "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell C:\\scr.ps1";
Process powerShellProcess = Runtime.getRuntime().exec(command);
powerShellProcess.getOutputStream().close();
String line;
System.out.println("Standard Output:");
BufferedReader stdout = new BufferedReader(new InputStreamReader(
powerShellProcess.getInputStream()));
while ((line = stdout.readLine()) != null) {
System.out.println(line);
}
stdout.close();
//En caso de error se obtiene
System.out.println("Standard Error:");
BufferedReader stderr = new BufferedReader(new InputStreamReader(
powerShellProcess.getErrorStream()));
while ((line = stderr.readLine()) != null) {
System.out.println(line);
}
stderr.close();
System.out.println("Done");
在我尝试将所有命令放入命令字符串之前,但这没有用,所以我决定把它放在一个脚本中。该脚本包含:
$pass = ConvertTo-SecureString "pass" -AsPlainText -Force
$cred = New-Object System.management.Automation.PSCredential("user", $pass)
Enter-PSSession -ComputerName User-Pc -Credential $cred ;
dir
但是最后一个命令dir
是在mi本地桌面而不是在远程的桌面上完成的,我调试并且我没有发现脚本工作的任何错误,连接已经完成但是我没有'理解为什么dir
命令不能在远程桌面上执行,有人知道发生了什么事吗?
答案 0 :(得分:1)
Enter-PSSession
用于交互式使用。对于非交互式命令执行,请使用Invoke-Command
:
Invoke-Command -Computer 'User-Pc' -Scriptblock {
Get-ChildItem
} -Credential $cred