РЕДАКТИРОВАТЬ: я выяснил, как решить конкретную часть кода, поврежденную частью моего вопроса (см. Мой ответ ниже), но я все еще ищу ресурсы по интеграции powershell и C #, поэтому, пожалуйста, не стесняйтесь комментировать или отвечать! 1001 *
Я нашел простой пример того, как сделать ваши объекты C # видимыми для сценариев powershell, и я поиграл с этим.
Используя следующий код:
public partial class MainWindow : Window
{
public string MyName = "Evan";
public MainWindow()
{
InitializeComponent();
MessageBox.Show(RunScript("$DemoForm | Get-Member"));
MessageBox.Show(RunScript("$DemoForm.MyName"));
MessageBox.Show(RunScript("$DemoForm.Title"));
}
private string RunScript(string scriptText)
{
// create Powershell runspace
Runspace runspace = RunspaceFactory.CreateRunspace();
// open it
runspace.Open();
runspace.SessionStateProxy.SetVariable("DemoForm", this);
// create a pipeline and feed it the script text
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(scriptText);
// add an extra command to transform the script
// output objects into nicely formatted strings
// remove this line to get the actual objects
// that the script returns. For example, the script
// "Get-Process" returns a collection
// of System.Diagnostics.Process instances.
pipeline.Commands.Add("Out-String");
// 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());
}
return stringBuilder.ToString();
}
}
Я получаю ожидаемые результаты от этих двух строк:
MessageBox.Show(RunScript("$DemoForm | Get-Member"));
MessageBox.Show(RunScript("$DemoForm.Evan"));
Но эта строка не работает (без ошибок, просто возвращает пустую строку):
MessageBox.Show(RunScript("$DemoForm.Title"));
Есть идеи, почему первые два работают, а не третьи? Имеет ли это какое-то отношение к многопоточности (необходимость доступа к определенным графическим объектам из sta-потока?)? Похоже, что аналогичные функции работали с WindowsForms для постера примера кода.
Кроме того, кроме того примера, который я связал с , и вот здесь Мне не удалось найти много ресурсов в Интернете о связях c # и powershell. В конечном итоге я пытаюсь создать приложение, которое можно будет создавать с помощью сценариев PowerShell. Кто-нибудь знает о других хороших онлайн-ресурсах или хорошей книге, посвященной этой теме?
Спасибо !!!!