如何在域中以模拟用户身份运行提升的命令

本文关键字:运行 身份 命令 用户 模拟 | 更新日期: 2023-09-27 18:31:44

我们的域中有很多客户端与我们的网络没有持续连接。我们的用户正在使用不同类型的网络打印机(通常由我们提供)在小型(有时断开连接)的本地网络上工作。在这个小网络中,也有未加入我们域的人(合作伙伴,雇主,..)需要这些打印机。其中一些用户是本地管理员,但大多数不是。

我的目标是(动态地)为每台打印机创建一个安装程序,以便用户可以从我们的网络、USB、CD 运行此安装程序,..以便创建本地 tcp/ip 端口,安装打印机驱动程序并添加打印机。

我的问题在于获得足够的权限来执行安装。(1) 如果(并且仅当!)本地用户是管理员,安装程序应启动提升的应用程序来处理安装。(2) 如果用户是我们域的成员,但他不是本地管理员,则安装程序应使用我们的策略添加的本地管理员帐户。

我知道如何

运行一个提升的进程,该进程会打开UAC进行确认,并且我知道如何模拟其他用户。

但是,当尝试在模拟时提升命令时,我从未看到提升确认。这是合乎逻辑和正常的。

有什么提示或技巧吗?任何人?

如何在域中以模拟用户身份运行提升的命令

你知道什么......毕竟这似乎是可能的。我首先使用了一个模拟来触发提升提示,但不起作用。实际上,这更容易。

以下是精简的基础知识:

[第一应用]

var str = "%My Administrator Password%";
var pwd = new System.Security.SecureString();
foreach(char c in str) pwd.AppendChar(c);
ProcessStartInfo psi = new ProcessStartInfo();
psi.UseShellExecute = false;
psi.WorkingDirectory = @"C:'path";
psi.FileName = @"C:'path'SecondApp.exe";
psi.UserName = "%My Administrator UserName%";
psi.Domain = "%My Administrator Domain%";
psi.Password = pwd;
psi.Verb = "runas";
var proc = new Process();
proc.StartInfo = psi;
proc.Start();

[第二应用.exe]

ProcessStartInfo psi = new ProcessStartInfo();
psi.UseShellExecute = true;
psi.WorkingDirectory = @"C:'path";
psi.FileName = @"C:'path'ElevatedApp.exe";
psi.Verb = "runas";
var proc = new Process();
proc.StartInfo = psi;
proc.Start();

为我工作。触发 FirstApp 的简单用户.exe看到的提升提示以提升的管理员身份执行。

感谢J.罗宾斯:http://www.wintellect.com/blogs/jrobbins/elevate-a-process-at-the-command-line-in-vista