【发布时间】:2023-01-09 19:58:40
【问题描述】:
我正在为 Windows C# 服务编写安装程序包装器。作为安装的一部分,我需要获取当前用户的凭据,或者让用户提供凭据。我需要使用 PowerShell 进行服务安装(使用 New-Service),但我需要提供凭据作为 PSCredential 对象。
这样的对象可以通过Get-Credentials返回,但我不能在不访问PS Host UI的情况下调用这个命令,我似乎无法做到这一点。
我可以用懒惰的方式做到这一点,然后弹出一个对话框询问用户名和密码,然后将它们塞进一个新的PSCredential,但这是非常糟糕的做法。
我也可以通过 CredUIPromptForWindowsCredentials 的方式通过 PInvoking 获取这些凭据,但同样,这非常笨拙,最终会在内存中产生一个我想避免的纯文本密码。
肯定有一些中间?我正在从 WPF 表单运行此交互,因此我可以愉快地向用户显示凭据对话框,但我不知道如何以明智的方式执行此操作。
如果有一种安全的方法来创建服务并通过当前登录的用户作为“运行方式”用户传递,那也很好。
任何意见,将不胜感激。
【问题讨论】:
标签: c# powershell