我有远程机器的 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?
这正是我的问题 - 为什么我不能以编程方式使用它们?如果我该怎么做?