【问题标题】:Execute Powershell script from C# with administrator privilege and permissions使用管理员权限和权限从 C# 执行 Powershell 脚本
【发布时间】:2018-09-11 14:55:13
【问题描述】:

我正在准备通过具有管理员权限的 C# 执行 Powershell 脚本。

我尝试了很多方法,但都没有结果。

我能做的最好的事情就是使用 runas 动词启动一个进程 (System.Diagnostics.Process.Start(p))。这样,如果执行服务的用户是管理员,我可以运行我的 powershell 脚本。

但是,我需要的是使用低权限用户执行服务,并在需要时使用管理员“登录”并执行 powershell 脚本。

我尝试冒充管理员,但没有成功...

答案Execute PowerShell as an administrator from C# 没有解决问题,我的脚本还是不能运行。答案来自 2009 年,我希望在此期间有人解决了此类问题。

        // powershell script execution
        var processInfo = new System.Diagnostics.ProcessStartInfo
        {
            Verb = "runas",
            LoadUserProfile = true,
            FileName = "powershell.exe",
            Arguments = scriptPath,
            RedirectStandardOutput = true,
            UseShellExecute = false
        };

        var p = System.Diagnostics.Process.Start(processInfo);

【问题讨论】:

  • 遗憾的是,这个答案没有帮助。建议的模仿者是我在代码中使用的模仿者。
  • 如果这就是您的要求,您无法在不触发 UAC 提示的情况下自动提升。
  • “我能做的最好的就是使用 runas 动词启动一个进程 (System.Diagnostics.Process.Start(p))。这样,如果执行服务的用户是管理员,我就可以运行我的 powershell 脚本。”那里的“服务”是什么?由于您使用runas 动词,因此第二个进程(可能是 PowerShell)在 Windows 启动时应触发 UAC 提示,这是请求管理员权限的标准方式。
  • @LexLi “服务”是一个经典的 Windows 服务,我已将运行用户更改为自定义用户以进行 sql 身份验证。 runas 动词不会触发 UAC 提示。使用默认的“本地系统”用户作为登录用户,我的 power shell 脚本可以完美运行。

标签: c# powershell


【解决方案1】:

模拟应该有效。但是,我通常会避免使用它,因为我不喜欢在不需要时存储用户凭据。

我在正在开发的应用程序中遇到了类似的需求。 该应用程序在 IIS 中运行,大多数时候不需要(也不应该拥有)完全的管理员访问权限。 为了处理这种情况,我运行了一个具有完全管理员权限的单独应用程序(一个 Windows 服务)。 它接受来自 IIS 应用程序的请求并执行相应的管理功能。

我的 IIS 应用程序和 Windows 服务通过 AMQP(使用 RabbitMQ)进行通信。但是,您可以轻松地使用您喜欢的任何通信通道 - HTTP、TCP,甚至只是创建一个文件并让管理应用程序查找该文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-26
    • 2011-07-24
    • 2019-07-03
    • 2015-04-02
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多