I want to add a facility in a c# application where i can:
1) Take a collection of objects, and pass it to a powershell script from inside my c# application
2) Have the powershell script make changes to the the list of objects it was passed
3) Return that list of objects back to c#
I have an external class called 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; }
}
I populate the PSDataCollection list class as such:
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" }
}
In the powershell script we want it to 1) Read each object 2) Adjust the date field by adding 2 hours to it
Implementation issues:
The following code is our attempt at getting it working. The first issue we hit was how to import the Message class from an external DLL.
We tried this: Add-Type "G:\testBAL\bin\Debug\testBAL.dll" but got errors
Any help would be appreciated.
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);
}
}
}
}