当您在标准模式下运行 PowerShell 时,您会说:使用当前已通过身份验证的凭据以及会话和上下文运行 PowerShell。这包括您当前会话中的所有驱动器映射。
当您以管理员身份运行 PowerShell 时,第一个问题是:如何验证凭据是否有效?您不能只查看用户名并假设您可以重用现有会话,例如您必须在此时明确检查您是否是管理员组的成员。为了验证凭据,PowerShell 执行身份验证检查,然后获取新的身份验证票证。这个新的身份验证票证创建了新的 PowerShell 会话运行所在的新上下文的基础。
由于它是一个新会话,在全新的上下文中运行,具有新的身份验证票证,因此它不会继承任何映射的驱动器,因为当前的管理会话尚未通过任何映射的驱动器进行身份验证。只有您的其他“非管理”或“正常”会话已通过您的任何映射驱动器进行身份验证。
这意味着默认情况下,您的管理会话开始时没有您之前会话中的任何映射驱动器,并且访问或权限无关紧要,您只是没有使用新的身份验证票证进行身份验证.这意味着,在以管理员身份启动后,您必须手动重新映射所有驱动器,因为您必须使用新的身份验证票证重新验证所有映射。
基本上,如果您需要在管理会话中访问映射的驱动器,则需要重新映射它们。
编辑:
但是,根据@ErykSun 的cmets,@ErykSun 通过设置:EnableLinkedConnections 提供了唯一的解决方法。这是一个非常具体的解决方法,仅适用于登录时使用正确 UAC 设置的 GPO 映射驱动器。
此“新会话”问题是由 Microsoft 引入的新“功能”引起的:UAC 提升(也就是停止以管理员身份运行所有内容)。为了使某些旧版应用程序正常工作,Microsoft 必须添加此注册表项来为映射驱动器创建解决方法,例如最值得注意的是,如果您需要以管理员身份从映射驱动器上运行某些东西(从映射驱动器上运行某些东西并因为找不到自身或所需的其他文件而立即崩溃,这是一种糟糕的用户体验)。
它的工作原理非常巧妙。登录时,它将同时创建 两个会话。您的常规非提升会话,以及提升的管理会话。登录时,创建驱动器映射时,系统会创建将驱动器号与 UNC 路径相关联的符号链接对象。
注意:这仅在登录时使用,因此需要注意的是它仅适用于 GPO 映射驱动器。
通过登录脚本映射的驱动器将不起作用,因为您已经“启动”了会话,并且没有链接。与会话期间手动映射的驱动器相同。此外,当 UAC 策略配置为 Prompt for credentials 时,这不会隐式创建第二个管理会话(您假设用户不是管理员),因此以管理员身份运行将创建一个新会话,具有相同的上述问题。
注意,您可以通过 GPO 启用它:
-
在本地组策略编辑器中,找到以下组策略路径:
Local Computer Policy\Windows Settings\Security Settings\Local Policies\Security Options
-
将以下策略配置为提示同意:
用户帐户控制:管理员批准模式下管理员的提升提示行为
或者通过设置注册表项:
- 打开注册表
-
找到并右键单击以下注册表子项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
选择“新建”并单击 DWORD(32 位)值
- 命名:
EnableLinkedConnections
- 右键单击
EnableLinkedConnections,然后单击“修改”
- 在“数值数据”框中,输入
1,然后点击确定。
- 退出注册表编辑器,然后重新启动计算机