来自当前用户的 PS 回复

本文关键字:PS 回复 用户 | 更新日期: 2023-09-27 18:34:08

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

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

某些脚本需要提升的权限才能成功运行。 没问题 - 似乎至少有 2 种方法可以解决这个问题:

1.冒充。应用程序执行授权,并在这些凭据下调用电源外壳。 我早期遇到了一个问题,因为模拟/提升的用户可能没有在用户的本地计算机上调用 powershell 命令的权限 - 因为本地计算机可能没有适当的 ExecutionPolicy,因此提升的用户必须访问注册表才能更改此设置。我对更改权限没有影响力。 这让我朝着:

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

[PSCredential]$credential

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

我的

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

谢谢你的时间。

来自当前用户的 PS 回复

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

我很确定你可以用System.Security.Principal class来实现这一点。它有一个名为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; 
    } 

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

我不熟悉 powershell,但我在我的公司中将这个类用于域内的一些私人应用程序,并且效果很好。