2016-07-08 51 views
0

我想构建一个C#控制台应用程序,该应用程序执行一系列针对Azure订阅运行的PowerShell命令。从C#调用的PowerShell AddCommand异常

var line1 = "$cred = Get-Credential" 
var line2 = "Add-AzureAccount -Credential $cred" 
var psi = PowerShell.Create() 
psi.AddCommand(line1); 
psi.AddCommand(line2); 
var output = psi.Invoke(); 

我以为它会呈现一个交互式登录框,然后继续运行。相反,这是抛出:

类型的未处理的异常 'System.Management.Automation.CommandNotFoundException' 发生在 System.Management.Automation.dll附加信息:术语 “$名气= GET-凭证“没有被识别为cmdlet, 功能,脚本文件,或operabl的名字......

如果我从CMD开始的PowerShell,并键入

$名气= GET-凭证

我得到了默认的交互式登录框,用户可以输入凭证并将它们捕获到$ cred中,然后我可以继续。

什么是正确的命令集,使这项工作在C#中?

谢谢。

+0

默认情况下,在PowerShell中没有命令带有这样奇怪的名称'$ cred = Get-Credential'或'Add-AzureAccount -Credential $ cred'。另外,'Get-Credential'不提供交互式登录框。由'$ Host.UI.PromptForCredential'提供的交互式登录框。所以,你需要提供支持这种方法的'PSHost'实例。 – PetSerAl

+0

@PetSerAl - 我不明白如何向用户提供从C#运行Posh时熟悉的交互式默认登录框。理想情况下,我想要使用Posh,并在.NET代码中运行它,该怎么做? – Snowy

回答

0

这不是一个小任务,但您可以使用Wpf在PowerShell中创建UI。从a推出。 NET控制台应用程序,您可以创建一个PowerShell的运行空间,创建您的登录提示用户界面,并从那里去。我们这样做,但有一个非常具体的用例 - 对于大多数情况下,你通常不会像你所建议的那样混合两者。 https://foxdeploy.com/2015/04/10/part-i-creating-powershell-guis-in-minutes-using-visual-studio-a-new-hope/