好吧,所以,我一直在网上搜索,我根本找不到任何东西。
基本上,我想要做的是从提升的PowerShell脚本运行程序,但我希望程序以标准用户身份运行。
我需要这样做,因为我需要运行的程序需要访问域管理员帐户无法访问的映射网络驱动器。因此,我基本上需要一行代码来使脚本脱离提升模式,或者对Start-Program命令进行一些扩展,使其以登录用户身份运行,而不是运行脚本的管理员帐户。
答案 0 :(得分:3)
您可以使用psexec
psexec -l powershell.exe -executionpolicy unrestricted -noexit -file c:\temp\checkelevated.ps1
-l:以受限用户身份运行进程(剥离Administrators组并仅允许分配给Users组的权限)。在Windows Vista上 该过程以低完整性运行。
答案 1 :(得分:0)
我想有更多的方法可以做到(可能有些更好),但这也应该有用。
如果您需要从提升的environemnt在当前登录用户下运行可执行文件或脚本,则可以使用RunAs
将USERNAME
环境变量作为user
参数传递:
runas /user:%USERNAME% program.exe
USERNAME
环境变量应该包含当前登录的用户,即使在高架环境中也是如此。
答案 2 :(得分:0)
通常的预期和接受的方法是指定网络UNC路径而不是网络驱动器。如果需要,您甚至可以在升级过程中重新映射驱动器。这就是你应该怎么做的。如果您有一个运行需要访问网络位置的进程的帐户,那么正确的答案是授予该帐户执行该工作所需的访问权限。
然而....
this或this或this是否描述了您实际遇到的问题?目前还不清楚你要做什么。你已经从你的问题中删除了所有上下文。
如果您正在尝试运行需要运行提升并需要访问用户网络驱动器的脚本,并且无法使用UNC路径,无论出于何种原因,那么以上三个链接是你可能想要的。
如果你真的,真的需要模仿登录用户 - 我真的很难想到我需要从脚本中执行此操作的情况 - 然后阅读。
不需要用户凭据知识的替代方案是:
对于其他任何事情,我认为您将需要当前用户的凭据。您要做的就是凭证劫持,并且操作系统安全性是专门为而不是而设计的。
答案 3 :(得分:0)
我过去广泛使用的一种方法是动态创建计划任务,将当前记录的用户指定为将运行任务的帐户。该任务将运行一些其他脚本,命令等,它将发生在登录用户的上下文中。这可以通过使用Start-Process
来调用将要...的schtasks.exe程序来实现。
schtasks /create /tn "MyTask" /tr "powershell -file...." /ru "domain\username"
)schtasks /run /tn "MyTask"
)schtasks /delete /tn "MyTask"
)您只需要您的脚本来获取当前用户,这可以通过多种不同方式完成。我也在这些对schtasks的调用之间暂停了2秒,以确保它们全部运行。