【问题标题】:Unelevate PowerShell Session取消 PowerShell 会话
【发布时间】:2019-05-12 15:31:16
【问题描述】:

我有一个以管理员身份运行的 PowerShell 脚本,它调用的另一个脚本需要以管理员身份运行。我以前使用Start-Process -FilePath "powershell.exe" -Verb runas 进行提升,但我如何才能从已经以管理员身份运行的会话“取消提升”?

我想避免使用psexecthis post 使用的第三方工具。理想情况下寻找内置 PS 功能或 PSSnapin。

需要此“未提升”会话的特定过程是查看管理员安装的驱动器。根据这个article UAC 可能是罪魁祸首。提出的解决方案正在运行以下内容: New-ItemProperty -Path HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableLinkedConnections -Value 1 -PropertyType DWord

但是,当Get-PSDrive 在提升的会话中运行时,驱动器仍然不显示。

【问题讨论】:

  • 类似:Start-Process -FilePath "powershell.exe" -Credential <standard user creds>
  • 我尝试了这个 Start-Process 概念,但它仍然以管理员身份运行,尽管有 凭据。
  • 你在解决什么问题需要这个?
  • 试图查看标准用户安装的网络驱动器列表。但是,必须将列表视为以管理员身份运行的较大脚本的一部分。从管理员脚本运行 mountGet-PSDrive 不会显示预期的驱动器。但是,当这些命令中的任何一个以标准权限运行时,驱动器就会显示出来。

标签: powershell uac


【解决方案1】:

您可以尝试在此答案Batch file: Drop elevated privileges (run a command as original user) 中为“unelevation”使用内置的 runas.exe

runas /trustlevel:0x20000 "YourCommandHere"

【讨论】:

  • 对于一般的YourCommandHere(例如“timeout 10”),这种技术会起作用。但是,我的脚本使用Get-PSDrive(或mount cmd.exe 等效项)查看映射的网络驱动器。我为“YourCommandHere”创建了一个 .bat 文件(运行 mount),但它没有显示预期的驱动器。
  • 看来您的问题与“不高”无关。你见过这个superuser.com/questions/199387/… 吗?
  • 类似问题,但我需要避免再次映射共享驱动器(只是测试“未提升”用户的安装成功)。有趣的article 从该帖子链接到微软提出的解决方案。我尝试按照那篇文章中的建议在EnableLinkedConnections 的“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System”中创建一个新的注册表项 - 但尚未改善结果。
  • IIRC, EnableLinkedConnections 需要重启才能生效。但正如我之前提到的,我认为这无论如何都不能解决您的问题,因为映射驱动器是每个用户的。
猜你喜欢
  • 2013-09-03
  • 2012-05-25
  • 2019-07-31
  • 2013-01-04
  • 2018-05-25
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
相关资源
最近更新 更多