我试图在没有运气的情况下调用“Get-Credential”CMDlet。阅读Powershell SDK我找到了抽象方法“PSHostUserInterface.PromptForCredential Method(String,String,String,String)”。有什么对象可以实现这种方法吗?
还有其他解决方案吗?
此致
答案 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 here和here调用它的代码。