I want to add an object to a C # application where I can:
1) Take a collection of objects and pass it to a powershell script from my C # application
2) Change the powershell script to make changes to the list of transferred objects
3) Bring this 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 list class PSDataCollection 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 1) Read each object 2) Adjust the date field by adding 2 hours to it
Implementation Issues:
The following code is our attempt to make it work. The first problem we encountered 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); } } } }