为什么在远程计算机上以编程方式(C#)执行powershell cmdlet(使用参数);如果使用enter/impor

本文关键字:参数 如果 impor enter cmdlet powershell 编程 方式 执行 为什么 计算机 | 更新日期: 2023-09-27 18:00:40

我有远程机器的PSSession对象,比如说,我正在尝试执行"命令"

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

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

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

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

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

方法3-工作(使用Invoke命令并使用脚本块和会话对象执行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起作用,将命名参数传递到目标机器可能会更容易。

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

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

为什么在远程计算机上以编程方式(C#)执行powershell cmdlet(使用参数);如果使用enter/impor

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

相关文章: