从 C# 异常调用的 PowerShell AddCommand
Posted
技术标签:
【中文标题】从 C# 异常调用的 PowerShell AddCommand【英文标题】:PowerShell AddCommand called from C# Exception 【发布时间】:2016-07-08 02:37:19 【问题描述】:我正在尝试构建一个 C# 控制台应用程序,该应用程序执行一系列针对 Azure 订阅运行的 PowerShell 命令。
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 附加信息:术语 '$cred = Get-Credential' 未被识别为 cmdlet 的名称, 函数、脚本文件或可操作...
如果我从 CMD 启动 PowerShell,然后键入
$cred = 获取凭据
我会看到默认的交互式登录框,用户可以输入凭据,然后它们会被捕获到 $cred,我可以继续。
在 C# 中实现这项工作的正确命令集是什么?
谢谢。
【问题讨论】:
PowerShell中默认没有$cred = Get-Credential
或Add-AzureAccount -Credential $cred
这样奇怪名称的命令。此外,Get-Credential
不提供交互式登录框。 $Host.UI.PromptForCredential
提供的交互式登录框。因此,您需要提供支持此方法的PSHost
实例。
@PetSerAl - 从 C# 运行 Posh 时,我不明白如何向用户展示熟悉的交互式默认登录框。理想情况下,我想采用有效的 Posh 并在 .NET 代码中运行它,该怎么做?
【参考方案1】:
这不是一个小任务,但是您可以使用 Wpf 在 powershell 中创建 ui。从一个启动。 NET 控制台应用程序,您可以创建一个 powershell 运行空间,创建您的登录提示 ui 并从那里开始。我们这样做了,但有一个非常具体的用例 - 对于大多数情况,您通常不会按照您的建议将两者混合在一起。 https://foxdeploy.com/2015/04/10/part-i-creating-powershell-guis-in-minutes-using-visual-studio-a-new-hope/
【讨论】:
以上是关于从 C# 异常调用的 PowerShell AddCommand的主要内容,如果未能解决你的问题,请参考以下文章
如何从 C# 文件调试“调用”Powershell (ps1)
从 C# 调用 Lync server 2010 Powershell cmdlet