2011-11-09 17 views
1

我试图在以下C#代码中执行_Get-User -Identity "John Doe" | FL_命令。在C#中执行Powershell命令(get-user -Identity“John Doe”| FL)

 PowerShell powershell = PowerShell.Create(); 
     powershell.AddCommand("get-user"); 
     powershell.AddParameter("Identity", UserName.Text); 
     try 
     { 
      runspace.Open(); 
      powershell.Runspace = runspace; 
      Collection<PSObject> results = powershell.Invoke(); 

      var builder = new StringBuilder(); 
      foreach (var psObject in results) 
      { 
       builder.AppendLine(psObject.ToString() + "\r\n"); 
      } 
      ResultBox.Text = Server.HtmlEncode(builder.ToString()); 
     } 

在哪里添加_FL_命令?

+1

难道那只是将'results'传递给“FL”(一个不同的Powershell命令)吗?或者,也许你可以使用完整的命令字符串? – 2011-11-09 18:39:09

回答

-1

我不知道你想做的事,因为这样的事情可以用C#来完成搜索了很多。您可以更改常规PowerShell脚本而不是“WriteWhatYouWantToDo”。

Runspace runspace = RunspaceFactory.CreateRunspace(); 
runspace.Open(); 
RunspaceInvoke invo = new RunspaceInvoke(runspace); 
invo.Invoke("Set-ExecutionPolicy Unrestricted"); 
Pipeline pipeline = runspace.CreatePipeline(); 

Command command = new Command("get-module -listAvailable | import-module\n" + WriteWhatYouWantToDo); 

pipeline.Commands.Add(command); 
pipeline.Commands.Add("Out-String"); 
try 
{ 
Collection<PSObject> results = pipeline.Invoke(); 
runspace.Close(); 
StringBuilder stringBuilder = new StringBuilder(); 
foreach (PSObject obj in results) 
{ 
stringBuilder.AppendLine(obj.ToString()); 
} 

string result1 = stringBuilder.ToString(); 
string result = result1.Substring(0, 250); //define global scope 
} 
catch (Exception ex) 
{ 

} 
2

当您添加每个命令时,它将被添加到管道中。所以,如果你想要做format-list,您可以添加到管道:

powershell.AddCommand("get-user"); 
    powershell.AddParameter("Identity", UserName.Text); 
    powershell.AddCommand("format-list");' 
    //powershell.AddCommand("out-string"); 

但我使用results

+1

我认为它不会很好,但它很接近。我会再添加一些这些命令:'powershell.AddCommand(“Out-String”);'。 cmdlet'format-list'不返回格式化文本,它返回用于格式化实际输出的对象。我们必须触发这个输出。 –

+0

@RomanKuzmin - 是的,但这就是为什么我在最后一个问题中质疑OP为什么需要fl的原因。 – manojlds