2

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")
)

助けてください!ありがとう!

4

1 に答える 1

0

これを正しく理解していれば、リモート マシンでコマンドを呼び出していることになります。ただし、コマンドを含むファイルを使用しています。Invoke が呼び出されると、リモート システムを検索しようとして.\remoteSchedule.ps1、惨めな失敗をします。

自明な解決策は、remoteSchedule.ps1 がすべてのシステムがアクセスできるドライブ上にあることを確認し、署名されていないスクリプトを許可するように ExecutionPolicy が設定されていることを確認することです。

自明ではないのは、スクリプト全体を書き直してスクリプト内のすべてを実行し (スクリプトブロックなど)、ファイルを直接呼び出すのではなく、それを呼び出すことです。

于 2013-10-07T21:37:27.480 に答える