如何进行远程PSSession并在远程桌面上运行脚本?

时间:2018-05-12 21:25:04

标签: java powershell

当我尝试从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命令不能在远程桌面上执行,有人知道发生了什么事吗?

1 个答案:

答案 0 :(得分:1)

Enter-PSSession用于交互式使用。对于非交互式命令执行,请使用Invoke-Command

Invoke-Command -Computer 'User-Pc' -Scriptblock {
    Get-ChildItem
} -Credential $cred