C# 来自当前用户的PSE凭据

C# 来自当前用户的PSE凭据,c#,powershell,credentials,C#,Powershell,Credentials,我加入SO已经一年了,这是我第一个问题 我目前正在用C#开发一个调用PowerShell脚本的WinForms应用程序。它并不是为所有PowerShell功能设计的综合处理程序,只是使用简单、预先约定的参数类型执行少量脚本 某些脚本需要提升权限才能成功运行。没问题-似乎至少有两种方法: 1。模拟。 应用程序执行授权并根据这些凭据调用powershell。我很早就遇到了一个问题,即模拟/提升的用户可能没有权限在用户的本地计算机上调用powershell命令,因为本地计算机可能没有适当的Execut

我加入SO已经一年了,这是我第一个问题

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

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

1。模拟。 应用程序执行授权并根据这些凭据调用powershell。我很早就遇到了一个问题,即模拟/提升的用户可能没有权限在用户的本地计算机上调用powershell命令,因为本地计算机可能没有适当的ExecutionPolicy,因此提升的用户必须访问注册表才能更改这一点。我无权更改权限。这使我走向:

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

[PSCredential]$credential
应用程序可以通过提示用户输入此帐户的用户名和密码来提供

我的问题是:有没有一种方法可以从当前登录的用户处获取PSCredential对象,作为我的应用程序的某种默认对象?
我还没有看到任何迹象表明这是可以做到的,所以如果有人能告诉我为什么会这样,我会很高兴听到。如果有帮助的话,强制应用程序以管理员身份运行是可行的


谢谢您的时间。

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

编辑

我找到了一个例子,它非常简单(还有一个名为Codewithfullexample的选项卡-

编辑v.2

    private WindowsIdentity GetloggedinUser() 

    { 
        System.Security.Principal.WindowsIdentity currentUser =System.Security.Principal.WindowsIdentity.GetCurrent();    
        return currentUser; 
    } 
使用此方法后,您已检索到当前登录用户(WindowsIdentity类型)的实例。在下面的链接中,您可以看到WindowsIdentity类的属性


我不熟悉powershell,但我在我的公司将此类用于我们域内的一些私人应用程序,它运行良好。

如果不提示用户输入,确实无法获取当前用户的凭据。首先,从“SecureString”获取明文密码非常简单
PSCredential
实例的password属性。

不幸的是,您引用的示例没有解释如何获得PSCredential实例,这正是我正在努力解决的问题。它似乎也不知道当前用户及其当前域。我正在寻找最大程度的自动化。不知道当前用户?我'将回答我的问题。修改执行策略不需要注册表访问权限。您可以使用所需的执行策略启动powershell.exe,也可以使用为进程作用域设置所需策略的脚本初始化托管powershell运行空间。如果没有prompti,我想无法为当前用户获取凭据ng至少一次,因为这类似于获取当前用户的密码。但是,您可以提示,然后以加密形式存储凭据。谢谢@mikez。我认为这解决了问题-这是我将获得的最佳答案,所以请随意将其作为答案发布,我会接受它。