-1

我有远程机器的 PSSession 对象并说,我正在尝试执行“命令”

方法 1(在执行实际命令之前调用 enter-pssession):

Command cmd = new Command("enter-pssession");
cmd.Parameters.Add("Session",session);
pipeline.Commands.Add(cmd);
pipeline.Commands.Add(command);

方法 2(在执行实际命令之前调用 import-pssession):

Command cmd = new Command("import-pssession");
cmd.Parameters.Add("Session",session);
pipeline.Commands.Add(cmd);
pipeline.Commands.Add(command);

两种方法都不起作用,错误消息也很清楚。它说“术语‘命令’未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。”

方法 3 - 有效(使用 Invoke-Command 并使用脚本块和会话对象执行 cmd)

Command cmd = new Command("invoke-command");
cmd.Parameters.Add("session", session);
cmd.Parameters.Add("scriptblock", ScriptBlock.Create(command.ToString()));
if (null != argumentList)
{
    cmd.Parameters.Add("ArgumentList", argumentList);
}

我没有被阻止,因为我正在使用方法 3 并且能够继续我的工作。

但我仍然不确定为什么方法 1 或 2 不起作用。我相信如果我使方法 1 或 2 起作用,将命名参数传递给目标机器可能会更容易。

换句话说,正如 Musaab 所说,我们只能在交互模式下使用 enter/import-session cmdlet?

这正是我的问题 - 为什么我不能以编程方式使用它们?如果我该怎么做?

4

1 回答 1

0

PSSessoions 仅在交互模式下工作,因此您必须创建一个 PSSession,然后使用 Invoke-Command 在该会话上执行命令。

于 2013-02-24T09:07:36.720 回答