Powershell:我如何从C#代码获取凭据?

时间:2009-10-26 12:04:20

标签: powershell

我试图在没有运气的情况下调用“Get-Credential”CMDlet。阅读Powershell SDK我找到了抽象方法“PSHostUserInterface.PromptForCredential Method(String,String,String,String)”。有什么对象可以实现这种方法吗?

还有其他解决方案吗?

此致

2 个答案:

答案 0 :(得分:4)

浏览当前主机的UI对象,提示用户输入如下凭据:

PSCredential cred = this.Host.UI.PromptForCredential("Enter username/password",
                                                     "", "", "");

但是,如果要创建cmdlet并转到此路由而不是创建Credential参数,则用户将无法以自动方式提供凭据(即通过Credential参数的参数)。

顺便说一句,如果您的程序知道凭据并且您不想提示最终用户,那么您可以直接创建新的PSCredential,例如:

var password = new SecureString();
Array.ForEach("opensesame".ToCharArray(), password.AppendChar);
var cred = new PSCredential("john", password);

但是我不会在EXE中硬编码密码。我会使用DPAPI或类似的东西。

答案 1 :(得分:1)

你在写自定义PSHost吗?如果是这样,那么您的自定义主机将需要提供您自己的PSHostUserInterface实现,然后在其中实现PromptForCredential()。

如果您需要自己实现,并且想要使用PowerShell默认使用的标准Windows凭据对话框,那么您可以使用CredUIPromptForCredentials() api。有一些关于如何从.NET herehere调用它的代码。