我一直在尝试以下各种方法,试图以这样一种方式装载网络共享,即它可以在其他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。