Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使PowerShell以标准用户身份运行程序?_Powershell - Fatal编程技术网

如何使PowerShell以标准用户身份运行程序?

如何使PowerShell以标准用户身份运行程序?,powershell,Powershell,好吧,我一直在网上搜索,但我在这上面什么也找不到 基本上,我要做的是从提升的PowerShell脚本运行程序,但我希望该程序以标准用户的身份运行 我需要这样做,因为我需要运行的程序需要访问域管理员帐户无权访问的映射网络驱动器。因此,我基本上需要一行代码,使脚本脱离提升模式,或者对Start Program命令进行一些扩展,使其以登录用户的身份运行,而不是以运行脚本的管理员帐户的身份运行。您可以使用 -l:以受限用户身份运行进程(剥离Administrators组,只允许分配给Users组的权限)

好吧,我一直在网上搜索,但我在这上面什么也找不到

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

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

您可以使用

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

你可以用

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


我想有更多的方法可以做到这一点(可能有些甚至更好),但这也应该行得通

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

runas/用户:%USERNAME%program.exe


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

我想有更多的方法可以做到这一点(可能有更好的方法),但这也应该有效

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

runas/用户:%USERNAME%program.exe


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

执行此操作的常用方法是指定网络UNC路径,而不是网络驱动器。如果需要,您甚至可以在提升过程中重新映射驱动器。你应该这样做。如果您有一个帐户正在运行一个需要访问网络位置的进程,正确的答案是授予该帐户执行其任务所需的访问权限

然而

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

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


如果你真的,真的需要模拟一个登录的用户——我真的很难想象我需要通过脚本来实现这一点——那么请继续阅读

不需要了解用户凭据的备选方案有:

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

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

    通常使用的方法是指定网络UNC路径,而不是网络驱动器。如果需要,您甚至可以在提升过程中重新映射驱动器。你应该这样做。如果您有一个帐户正在运行一个需要访问网络位置的进程,正确的答案是授予该帐户执行其任务所需的访问权限

    然而

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

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


    如果你真的,真的需要模拟一个登录的用户——我真的很难想象我需要通过脚本来实现这一点——那么请继续阅读

    不需要了解用户凭据的备选方案有:

  • 使用用户登录脚本而不是计算机启动脚本。如有必要,授予本地用户运行脚本其余部分所需的权限。我无法想象你还没有想到这一点
  • 创建一个计划任务,该任务以“域用户”或代表相关用户的其他组的身份运行,并选中“仅在登录时运行”。同样,您需要授予用户运行其余部分所需的权限
    psexec -l powershell.exe -executionpolicy unrestricted -noexit -file c:\temp\checkelevated.ps1