【发布时间】: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