与MS文档相反,其他shell看不到新的PSDrive



我一直在尝试以下各种方法,试图以这样一种方式装载网络共享,即它可以在其他shell和文件资源管理器中都可见。根据MS文档中的相关命令,称可以使用-Persistent-Scope Global使其";其他外壳立即可见";,它就是不起作用。

$mDL       = 'Z'        # Mount to this Drive Letter
$dDesc     = 'ML-DATA'  # Description of PSDrive
$NLRoot    = "\somepath.windows.netxxx"
$UserName  = "localhostsomeuser"
$cred = Get-Credential -Credential $UserName
New-PSDrive -Name $mDL -PSProvider "FileSystem" -Root $NLRoot -Credential $cred -Description $dDesc -Persist -Scope Global

数据容器在Azure中,除了从我的系统(Win10)中的其他部分可见之外,一切似乎都能正常工作。

如何使此驱动器在其他PowerShell实例和文件资源管理器中可见


更新2022-07-06

糟糕的是,文本来自New SmbMapping的ss64文档,其中写道:

使用New-SmbMapping创建驱动器映射时,在重新启动(或重新启动机器)之前,任何当前运行的进程(包括Windows资源管理器)都不会看到新驱动器唯一的例外是PowerShell控制台,计算机上的所有PowerShell会话都将立即获得新的驱动器映射

也可能是非专业人员不容易理解MS文档,因为在新PSDrive文档中,以下内容在两个地方说明。

  • Example-4:
    映射的驱动器可以在本地计算机上的PowerShell会话、文件资源管理器以及net use等工具中查看

  • -Persist下的Paramters列表中:
    映射的网络驱动器保存在本地计算机的Windows中。它们是持久的,不是特定于会话的,可以在文件资源管理器和其他工具中查看和管理


那么,我如何使这个共享用户会话类型不可知,以使Z:可见";"无处不在";并且对于";每个人";在文件资源管理器和他们想要使用的任何powershell/cmd中?


有用参考

  • https://www.bloggingforlogging.com/2018/11/22/windows-mapped-drives-what-the-hell-is-going-on/
  • https://activedirectorypro.com/map-network-drives-with-group-policy/

我不确定Azure特定的考虑因素是否适用,但一般来说:

tl;dr

";所有其它外壳都能立即看到">关于新建立的持久驱动器映射,适用于:

  • 默认情况下:创建的Shell进程(如PowerShell和cmd.exe会话)-更常见的是(本机)进程-

    • 同一用户
    • 具有相同的会话类型常规(非提升)与提升的会话类型(以管理员身份运行)
  • 如果相应地配置了您的系统(见下文):创建的进程:

    • 同一用户
    • 与会话类型无关

注意:此答案中的所有信息也适用于非持久性映射驱动器,假设它们是使用系统级功能(如net.exe use或文件资源管理器)建立的。PowerShell不允许创建这样的映射:如果在New-PSDrive调用中省略-Persist,则将获得一个(始终是非持久的、特定于会话的,并且可能是特定于作用域的)仅限PowerShell的驱动器。


持久映射的网络驱动器是特定于用户的

  • 正如预期的其他用户将看不到给定用户的永久映射驱动器。

  • 令人惊讶的即使在同一用户的上下文中,尝试从提升的会话(以管理员身份运行)建立持久驱动器不会工作:使映射持久的请求被悄悄地忽略(也就是说,映射悄悄地仅为当前会话建立,并且仅对同一用户的其他提升进程可见)。

  • 默认情况下,提升会话与非提升会话不共享驱动器映射,因此提升会话中最初不存在驱动器映射。

    • 但是,使用额外配置,您可以使给定用户的两种类型的会话共享映射所做的允许您从提升的会话建立(持久和非持久)映射,这些映射对同一用户的非提升会话也是可见的-请参阅当UAC配置为提示凭据时,映射驱动器无法从提升的提示中使用

作为旁白:

您的New-PSDrive命令显示-Persist-Scope Global的使用,这确实是从脚本(从全局范围以外的范围,即直接从交互提示以外的范围)成功建立持久驱动器所必需的。

如果仅使用-Persist,则将被悄悄忽略:也就是说,将建立一个非持久性、仅作用域本地PowerShell驱动器。

考虑到建立持久驱动器映射与PowerShell的作用域无关,并且根据定义,成功建立的持久驱动器(或使用net use或从文件资源管理器建立的非持久驱动器)在所有PowerShell作用域中都可见,应该有没有还需要指定-Scope Global-不幸的是,决定不修复这个可用性问题:请参阅GitHub问题#15752。

相关内容

  • 没有找到相关文章

最新更新