来自当前用户的PSCredentials

时间:2014-12-12 17:42:30

标签: c# powershell credentials

我已经成为SO的成员一年了,这是我的第一个问题!

我目前正在C#中开发一个调用PowerShell脚本的WinForms应用程序。它并非旨在成为所有PowerShell功能的综合处理程序,而只是仅使用简单的预先约定的参数类型执行少量脚本。

某些脚本需要提升权限才能成功运行。没问题 - 似乎至少有两种方法:

1。模拟 应用程序执行授权并在这些凭据下调用powershell。我很早就遇到了问题,因为模拟/提升的用户可能没有权限在用户的本地计算机上调用powershell命令 - 因为本地计算机可能没有相应的ExecutionPolicy,因此提升的用户必须访问注册表以更改此权限。我没有改变权限。这导致我走向:

2。凭证作为变量。 简单。脚本有一个变量,如:

[PSCredential]$credential

应用程序可以通过提示用户输入此帐户的用户名和密码来提供。

我的问题是:有没有办法从当前登录的用户获取PSCredential对象,作为我的应用程序的某种默认值?
我没有看到任何暗示可以做到这一点的事情,所以如果有人可以淹没我为什么会这样,我会很高兴听到它。如果这有任何帮助,强制应用程序以管理员身份运行是可行的。

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

确实无法在不提示用户输入的情况下获取当前用户的凭据。首先,从" SecureString"中获取明文密码非常简单。 PSCredential实例的密码属性。

答案 1 :(得分:-2)

我非常确定您可以使用System.Security.Principal类实现此目的。它有一个名为getCurrent()的静态方法。此方法返回当前登录用户的WindowsIdentity对象。尝试搜索这个。如果我找到一篇文章,我将编辑这个答案

修改

我找到了一个例子,它非常直接(还有一个名为代码的标签,包含完整示例 - https://code.msdn.microsoft.com/windowsdesktop/Add-Window-Authentication-833ba913#content

编辑v.2

    private WindowsIdentity GetloggedinUser() 

    { 
        System.Security.Principal.WindowsIdentity currentUser =System.Security.Principal.WindowsIdentity.GetCurrent();    
        return currentUser; 
    } 

使用此方法后您已检索到当前登录用户的实例(WindowsIdentity类型)。在下面的链接中,您可以看到WindowsIdentity Class http://msdn.microsoft.com/en-US/library/system.security.principal.windowsidentity.aspx

的属性

我不熟悉powershell,但我在公司中使用这个类来创建域内的一些私有应用程序并且运行良好。