Я хочу добавить средство в приложении ac #, где я могу:
1) Взять коллекцию объектов и передать ее в скрипт powershell из моего приложения c #
2) Пусть сценарий powershell внесет изменения в список объектов, которым он был передан
3) Вернуть этот список объектов обратно в c #
У меня есть внешний класс с именем Message
public class Message
{
public String name { get; set; }
public String from { get; set; }
public String to { get; set; }
public String date { get; set; }
public String subject { get; set; }
public String body { get; set; }
}
Я заполняю класс списка PSDataCollection следующим образом:
PSDataCollection<Message> mlist = new PSDataCollection<Message>()
{
new Message { to="user1", from="user2", date = "1/10/2010 12:00:00 AM EST", subject = "hi there" , body = "hi again" },
new Message { to="user1", from="user3", date = "1/10/2010 12:00:00 AM EST", subject = "new messages" , body = "new messages" }
}
В скрипте powershell мы хотим, чтобы он: 1) Читал каждый объект 2) Настройте поле даты, добавив к нему 2 часа
Проблемы с реализацией:
Следующий код - наша попытка заставить его работать.Первая проблема, с которой мы столкнулись, заключалась в том, как импортировать класс Message из внешней DLL.
Мы пробовали это: добавить тип "G: \ testBAL \ bin \ Debug \ testBAL.dll", но получили ошибки
Любая помощь будет оценена.
namespace TestProject
{
class Program
{
static void Main(string[] args)
{
PSDataCollection<Message> mlist = new PSDataCollection<Message>()
{
new Message { to="user1", from="user2", date = "1/10/2010 12:00:00 AM EST", subject = "hi there" , body = "hi again" },
new Message { to="user1", from="user3", date = "1/10/2010 12:00:00 AM EST", subject = "new messages" , body = "new messages" }
};
mlist.Complete();
PowerShell ps = PowerShell.Create()
.AddScript("Add-Type G:\testBAL\bin\Debug\testBAL.dll")
.AddCommand("Select-Object");
IAsyncResult async = ps.BeginInvoke<Message>(mlist);
foreach(PSObject result in ps.EndInvoke(async))
{
String to = ((Message)(result.BaseObject)).to;
Console.WriteLine("to=" + to);
}
}
}
}