首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使PowerShell作为标准用户运行程序?

如何使PowerShell作为标准用户运行程序?
EN

Stack Overflow用户
提问于 2015-07-16 08:53:00
回答 3查看 9K关注 0票数 2

好吧,所以,我已经在网上搜索了很久了,我在这上面找不到任何东西。

基本上,我想要做的是从一个提升的PowerShell脚本中运行一个程序,但我希望该程序以标准用户的身份运行。

我需要这样做,因为我需要运行的程序需要访问域管理员帐户无法访问的映射网络驱动器。因此,我基本上需要一行代码将脚本从提升模式中删除,或者对Start-Program命令进行一些扩展,使其以登录用户的身份运行,而不是脚本运行的管理员帐户。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-16 09:24:56

你可以用psexec

代码语言:javascript
复制
psexec -l powershell.exe -executionpolicy unrestricted -noexit -file c:\temp\checkelevated.ps1

-l :以有限用户的身份运行流程(剥离Administrators组,只允许分配给user组的权限)。在Windows上,进程运行时的完整性很低。

票数 5
EN

Stack Overflow用户

发布于 2015-07-16 09:37:18

我想有更多的方法(可能更好),但这也应该是可行的。

如果需要从提升的环境中运行当前登录用户的可执行文件或脚本,可以使用RunAsUSERNAME环境变量作为user参数传递:

runas /user:%USERNAME% program.exe

即使在提升的环境中,USERNAME环境变量也应该包含当前登录的用户。

票数 0
EN

Stack Overflow用户

发布于 2015-07-16 12:02:17

要做到这一点,通常打算和接受的方法是指定网络UNC路径,而不是网络驱动器。如果你需要的话,你甚至可以重新映射提升过程中的驱动器。你应该这么做的。如果您的帐户运行一个需要访问网络位置的进程,则正确的答案是授予该帐户完成其工作所需的访问权限。

但是..。

是否描述了您实际遇到的问题?很不清楚你想做什么。你已经从你的问题中剔除了所有的背景。

如果您试图运行一个需要运行提升的脚本,并且需要访问用户的网络驱动器,并且由于任何原因不能使用UNC路径,那么上述三个链接可能就是您想要的。

如果你真的真的需要模拟一个登录用户--我真的很难想出我需要通过脚本来做这件事的情况--然后继续读下去。

不需要了解用户凭据的替代方法是:

  1. 使用用户登录脚本而不是计算机启动脚本。如果需要,请授予本地用户运行脚本其余部分所需的权限。我无法想象你还没有想到这一点。
  2. 创建一个作为“域用户”或代表有关用户的其他组运行的计划任务,并选中“登录时只运行”。同样,您需要授予用户运行脚本其余部分所需的权限,但这并不会限制您只登录。
  3. 编写一个调用ImpersonateLoggedOnUser的程序,该程序需要SeImpersonatePrivilege (默认情况下,管理员具有此功能,IIRC)。这些是本机Win32调用,而不是.Net,因此在PowerShell中使用它们并不简单。我看这个已经有十年了,它曾经是一个巨大的痛苦,因为它有时仍然会促使我获得证书。我认为Vista和以后(UAC,等)增加的安全性会使情况变得更糟。我也不知道您是否可以访问映射的驱动器(即,如果模拟生存网络跳)。我会选择这个方法,大概永远不会。

对于任何其他内容,我认为您将需要当前用户的凭据。您将做的是凭据劫持,操作系统安全是专门设计的,不允许这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31449633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档