2010-03-27 3 views
3

J'ai créé un objet powershell via .net pour appeler des commandes. Quand j'invoque les commandes normales comme 'Get-Process J'ai eu aucun problème:Utilisation de la classe PowerShell pour appeler une commande de style "[namespace.class] :: method"

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

mais je ne suis pas en mesure d'invoquer une méthode .net avec la syntaxe « [namespace.class] :: méthode », juste pour faire un exemple pour invoquer [System.IO.File] :: Exists ("c: \ boo.txt").

J'ai essayé avec

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

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

et quelques autres. Il déclenche toujours une exception qui indique que la commande spécifiée n'est pas reconnue.

Il existe un moyen d'appeler ce type de commande? Merci

Répondre

2

Vous devez ajouter script au pipeline depuis appelant vers .NET nécessite des méthodes de script à savoir .NET ne sont pas considérés PowerShell commands .: par exemple

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); 
    } 
} 
+0

Il semble fonctionner, merci :) – Marco

Questions connexes