azure - New-PSDrive 对其他 shell 不可见,与 MS 文档相反

标签 azure powershell smb new-psdrive

我一直在尝试以下各种方法,尝试以对其他 shell 和文件资源管理器中两者可见的方式挂载网络共享嗯>。根据相关命令的 MS 文档,说可以使用 -Persistent-Scope Global 使它们“立即对其他 shell 可见”,但事实并非如此工作。

$mDL       = 'Z'        # Mount to this Drive Letter
$dDesc     = 'ML-DATA'  # Description of PSDrive
$NLRoot    = "\\somepath.windows.net\xxx"
$UserName  = "localhost\someuser"

$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-SmbMappingss64 文档,其中指出:

When a drive mapping is created with New-SmbMapping the new drive will not be visible to any currently running processes (including Windows Explorer) until that process is restarted (or the machine is rebooted). The one exception to this is the PowerShell console, all PowerShell sessions on the machine will immediately get the new drive mappings.

也可能是非专业人士不容易理解 MS 文档,因为在 New-PSDrive 中文档中,以下内容在 2 个地方进行了说明。

  • 示例 4 中:
    可以在本地计算机上的 PowerShell session 、文件资源管理器以及使用 net use 等工具查看映射的驱动器。

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

<小时/>

那么我怎样才能使这个共享用户 session 类型不可知,使得Z:在“任何地方”都可见并且对于文件资源管理器和他们想要使用的任何 powershell/cmd 中的“每个人”?

<小时/>

有用的引用:

最佳答案

我不确定 Azure 特定的注意事项是否适用,但是,一般来说:

tl;博士

“对所有其他 shell 立即可见”对于新建立的持久驱动器映射适用于:

  • 默认情况:Shell 进程(例如 PowerShell 和 cmd.exe session ) - 更一般地说,( native )进程通常 - 创建的:

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

    • 同一用户
    • 与 session 类型无关

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

<小时/>

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

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

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

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

<小时/>

顺便说一句:

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

如果您-Persist单独使用,它会静静地被忽略:即非持久,已建立仅限范围本地 PowerShell 的驱动器。

鉴于建立持久性驱动器映射与 PowerShell 的范围无关,并且成功建立的持久性驱动器(或使用 net use 或文件资源管理器建立的非持久性驱动器)根据定义是可见的在所有 PowerShell 作用域中,应该不需要还需要指定-Scope Global - 不幸的是,我们决定不解决此可用性问题:请参阅 GitHub issue #15752 .

关于azure - New-PSDrive 对其他 shell 不可见,与 MS 文档相反,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72818119/

相关文章:

powershell - 新对象 : The term New-Object is not recognized as the name of a cmdlet

azure - 代表应用程序而不是用户访问 Azure Graph API

c# - 将 Microsoft Azure Function App 2.0 预览版绑定(bind)到 0.0.0.0

windows - 如何从 PowerShell 获取错误代码 (ErrorLevel) 到 Windows 命令提示符?

sql-server - 从 Powershell 调用 TRUNCATE 和 BULK INSERT INTO SQL 命令

Android JCIFS/SMB 在没有互联网的情况下无法在网络上运行

azure - 如何作为身份提供商从 ADFS 输出 B2C 中的组声明

c# - 离开 StreamReader 而不关闭 Stream

python - 如何在python中获取挂载的设备名称

c# - 如何以编程方式检查 SMB 连接是否已加密?