Выполнить сценарий PowerShell из C#

#powershell

#powershell

Вопрос:

Мне нужно создать приложение, которое будет запускать Power-Shell и запускать команду Get-Dedupjob , но я получил следующую ошибку:

термин «Get-Dedupjob» не распознается как имя командлета, функции, файла сценария или рабочей программы.

Хотя упомянутая команда работает правильно, когда я запускаю ее в power-shell (показать задания дедупликации).

Я полагаю, что проблема может заключаться в том, что программа не запускает команду от имени администратора. Есть ли какое-либо решение, позволяющее запустить это от имени администратора? Или где может быть проблема?

 private void button5_Click(object sender, EventArgs e)
              {

                  // Get-Dedupjob


                  // create Powershell runspace
                  Runspace runspace = RunspaceFactory.CreateRunspace();

                  // open it
                  runspace.Open();

                  // create a pipeline and feed it the script text
                  Pipeline pipeline = runspace.CreatePipeline();
                  pipeline.Commands.AddScript("Get-Dedupjob");


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

                  // close the runspace
                  runspace.Close();

                  // convert the script result into a single string
                  StringBuilder stringBuilder = new StringBuilder();
                  foreach (PSObject obj in results)
                  {
                      stringBuilder.AppendLine(obj.ToString());
                  }
                  textBox1.Text = Convert.ToString(stringBuilder);
              }
  

Ответ №1:

Вы должны импортировать соответствующий файл psd1

Ответ №2:

 private void button5_Click(object sender, EventArgs e)
              {

                  // Get-Dedupjob


                  // create Powershell runspace
                  Runspace runspace = RunspaceFactory.CreateRunspace();

                  // open it
                  runspace.Open();

                  PowerShell ps = PowerShell.Create();
                  ps.Runspace = rs;
                  ps.AddCommand("Get-Dedupjob");


                  // execute the script
                  Collection<PSObject> results = ps.Invoke();



                  // convert the script result into a single string
                  StringBuilder stringBuilder = new StringBuilder();
                  foreach (PSObject obj in results)
                  {
                      stringBuilder.AppendLine(obj.ToString());
                  }
                  textBox1.Text = Convert.ToString(stringBuilder);

                  // close the runspace
                  runspace.Close();
              }
  

Вам нужно будет создать объект powershell для выполнения команд powershell. Ниже приведен импорт инструкций using, который вам необходим для работы вышеописанного.

 using System.Management.Automation;           // Windows PowerShell namespace. 
using System.Management.Automation.Runspaces; // Windows PowerShell namespace.
  

Комментарии:

1. Спасибо за ваш ответ, но я уже использую эти объекты: с помощью System.Management. Автоматизация; с помощью System.Management. Автоматизация. Runspaces; используя System. IO;