如果忘记密码,则无法以管理员身份在网络位置打开

如果忘记密码,则无法以管理员身份在网络位置打开

在 Windows 上,当我尝试访问网络位置(具体来说,是与 Samba 共享的另一台 Linux 计算机上的驱动器)时,它会提示我输入用户名和密码。有趣的是,如果我输入用户名和密码,但没有勾选记住它的框,那么当我访问驱动器时,我无法以管理员身份在网络驱动器位置打开 powershell 或命令提示符,但我可以以非管理员身份打开:

在此处输入图片描述

set-location : Access is denied
At line:1 char:1
+ set-location '\\192.168.0.210\sambashare'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (\\192.168.0.210\sambashare:String) [Set-Location], UnauthorizedAccessException
    + FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.SetLocationCommand

set-location : Cannot find path '\\192.168.0.210\sambashare' because it does not exist.
At line:1 char:1
+ set-location '\\192.168.0.210\sambashare'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (\\192.168.0.210\sambashare:String) [Set-Location], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetLocationCommand

但是,如果我重新启动计算机,再次登录,然后勾选记住密码的框,我就可以以管理员身份打开。同样,如果我从 Windows 凭据管理器中删除凭据,我无法以管理员身份打开,但如果我恢复它,那么我就可以。换句话说,它似乎依赖于存储在 Windows 凭据管理器中的登录凭据。我也能够在其他 Windows 机器上重复此操作。

有人能解释一下这是为什么吗?我在使用 Windows 10 v1607 build 14393。

答案1

有两个因素导致了这种现象:

  • Set-Location有一些限制。它使用与文件资源管理器相同类型的系统命令进行导航,因此当它尝试对 SMB 共享进行身份验证时,它会执行相同的步骤(简化):

    1. 如果可用,请为当前用户尝试 kerberos/saml/ntlm。
    2. 如果被拒绝,请提供具有正确网络地址属性的任何已保存的凭据。
    3. 如果被拒绝,则提示用户输入凭证

    它无法像资源管理器那样显示凭据提示 GUI,因此当没有保存有效的存储凭据时它会失败。

  • Windows 在不同的 shell 中运行提升的进程,通常就像一个单独的用户。这很重要,因为 Windows 中的 SMB 连接都是用户模式,而mountLinux 中则不同。这可以算是透明的,因为文件资源管理器从不作为提升的进程运行。

    非提升的 powershell 会话使用与 explorer 相同的正在进行的 SMB 连接(包括没有保存凭据的连接),但提升的会话不能。这也适用于映射驱动器!不过,提升的进程确实可以访问相同的保存凭据,因此它可以在尝试时使用它们Set-Location


当使用 powershell 访问网络资源时,您经常需要使用New-PSDrive它在当前会话中建立连接:

$cred = Get-Credential  ## Prompt for creds, could also load stored credentials etc.
New-PSDrive -Name Stuff -PSProvider FileSystem -Root \\Samba01\Stuff -Credentials $cred
Set-Location Stuff:

相关内容