C# PowerShell 远程处理问题:方法或操作未实现
本文关键字:操作 实现 方法 PowerShell 处理问题 | 更新日期: 2023-09-27 18:34:16
我在使用 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")
)
请帮忙!谢谢!
如果我理解正确,那么您正在远程计算机上调用该命令。但是,您使用的是包含该命令的文件。当调用 Invoke 时,它试图在远程系统上查找.'remoteSchedule.ps1
,但惨遭失败。
简单的解决方案是确保remoteSchedule.ps1位于所有系统都可以访问的驱动器上,并确保ExecutionPolicy设置为允许未签名的脚本。
不平凡的是重写整个脚本以执行脚本中的所有操作(如脚本块(,并调用它而不是直接调用文件。