【问题标题】:C# PowerShell Remoting issue: method or operation not implementedC# PowerShell 远程处理问题:方法或操作未实现
【发布时间】:2013-10-07 09:48:38
【问题描述】:

我在使用 powershell 在其他计算机上调用命令的 c# 代码存在问题。当我将它输入到 Powershell 时,工作正常,但是当我尝试使用 C# UI 应用程序调用它时,它会抛出异常 Method or operation not implemented. 这是代码:

Command cmd = new Command(@".\remoteSchedule.ps1");

//determine if there is computer name or IP address
if (Char.IsDigit(cboMachine.Text.ToString().FirstOrDefault()))
    cmd.Parameters.Add("ComputerName", cboScheduleMachine.Text);
else
    cmd.Parameters.Add("ComputerName", cboScheduleMachine.Text + "." + ConfigurationManager.AppSettings["Domain"]);

cmd.Parameters.Add("UserName", @txtScheduleUsername.Text);
cmd.Parameters.Add("Password", txtSchedulePassword.Text);
cmd.Parameters.Add("TaskName", "\"" + txtScheduleTaskName.Text + "\"");
cmd.Parameters.Add("Command", "\"" + @txtScheduleCommand.Text + "\"");
cmd.Parameters.Add("arguments", "\"" + txtScheduleArguments.Text + "\"");
cmd.Parameters.Add("startDate", dpkScheduleStartDate.SelectedDate.Value.ToString("MM-dd-yyyy"));
cmd.Parameters.Add("startTime", txtScheduleStartTime.Text);
cmd.Parameters.Add("workingDirectory", "\"" + @txtWorkingFolder.Text + "\"");
cmd.Parameters.Add("run", chkScheduleRun.IsChecked);
pipeline.Commands.Add(cmd);

// execute the script
Collection<PSObject> results = pipeline.Invoke();
runspace.Close();

StringBuilder stringBuilder = new StringBuilder();
foreach (PSObject obj in results)
{
    stringBuilder.AppendLine(DateTime.Now.ToString() + ": ");
    stringBuilder.AppendLine(obj.ToString());
}
txtScheduleOutput.SelectionStart = 0;
txtScheduleOutput.Text = stringBuilder.ToString();

这是处理参数的powershell脚本部分:

Param(
[string]$ComputerName = $(throw "Missing parameter ComputerName"),
[string]$UserName = $(throw "Missing parameter UserName"),
[string]$Password = $(throw "Missing parameter Password"),
[string]$TaskName = $(throw "Missing parameter taskName"),
[string]$Command = $(throw "Missing parameter Command"),
[string]$arguments = $(throw "Missing parameter arguments"),
[datetime]$startDate = $(throw "Missing parameter startDate"),
[string]$startTime = $(throw "Missing parameter startTime"),
[string]$workingDirectory = $(throw "Missing parameter workingDirectory"),
[bool]$run = $(throw "Missing parameter run")
)

请帮忙!谢谢!

【问题讨论】:

  • 请更具体。它在哪一行抛出异常?
  • @tnw 抛出调用行。
  • 需要添加脚本remoteSchedule.ps1

标签: c# powershell remoting invoke


【解决方案1】:

如果我理解正确,那么您是在远程机器上调用命令。但是,您正在使用包含该命令的文件。当调用 Invoke 时,它​​试图在远程系统上找到 .\remoteSchedule.ps1,但失败得很惨。

简单的解决方案是确保 remoteSchedule.ps1 位于所有系统都可以访问的驱动器上,并确保将 ExecutionPolicy 设置为允许未签名的脚本。

不平凡的是重写整个脚本来做脚本中的所有事情(就像一个脚本块),并直接调用它而不是文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-06
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    相关资源
    最近更新 更多