views:

259

answers:

1

Hello, I created a powershell object via .net to invoke commands. When I invoke normal commands like 'Get-Process' I had no problems:

ps.AddCommand("Get-Process").AddParameter(...).Invoke()

but I'm not able to invoke a .net method with the syntax "[namespace.class]::method", just to make an example to invoke [System.IO.File]::Exists("c:\boo.txt").

I tried with

ps.AddCommand("[System.IO.File]::Exists(\"c:\\boo.txt\")").Invoke()

ps.AddCommand("[System.IO.File]::Exists").AddArgument("c:\\boo.txt").Invoke()

and some others. It always throws an exception which says that the command specified is not recognized.

There is a way to invoke that type of command? Thanks

+1  A: 

You need to add script to the pipeline since calling out to .NET requires script i.e. .NET methods are not considered PowerShell commands e.g.:

static void Main()
{
     PowerShell ps = PowerShell.Create();
     ps.AddScript(@"[IO.File]::Exists('C:\Users\Keith\foo.txt')");
     foreach (PSObject result in ps.Invoke())
     {
         Console.WriteLine(result);
     }
}
Keith Hill
It seems working, thanks :)
Marco