New-SmbMapping 是 PowerShell 中用于创建 SMB(Server Message Block)共享映射的 cmdlet,通常用于在本地计算机上映射共享文件夹(通过 UNC 路径)。它可以帮助自动化文件共享的连接管理,常用于将网络共享映射为驱动器字母,或与域凭据进行集成。

New-SmbMapping 拆解|底层原理 / 依赖文件 / 依赖关系 / 配套链 / 逻辑链路 / 边界

New-SmbMapping:PowerShell 内置 cmdlet,用于创建SMB 网络共享映射(对应传统net use命令),把 UNC 路径\\server\share映射成本地盘符(如 Z:)或无盘符持久连接。 模块来源:SmbShare.psd1 / SmbClient 模块,属于 Windows SMB 客户端管理模块(Windows 8 / Server2012 及以后引入)。

一、底层原理

New-SmbMapping 不是直接实现 SMB 协议收发,是 SMB 客户端的上层配置管理接口

  1. Cmdlet 调用 SMB Client Win32 API,向系统SMB 客户端组件提交映射请求:关联盘符 / 本地别名 + UNC 共享路径 + 凭据选项(持久化、凭据覆盖、域身份)。
  2. 系统 SMB 客户端(内核态)维护 SMB 连接表 + 会话表 + 映射表
    • SMB Session:客户端 ↔ SMB 服务器的身份会话(凭据、NTLM/Kerberos 认证)
    • SMB Tree Connect:会话内访问目标共享\\server\share
    • SMB Mapping:把 Tree 连接绑定到本地盘符(DOS 设备名 \DosDevices\Z:
  3. 持久化选项 (-Persistent):将映射写入注册表,用户登录自动重建映射;非持久映射仅当前用户会话有效,注销销毁。
  4. 文件访问:应用读写 Z 盘时,I/O 请求经过重定向器(MRxSmb),转发到远端 SMB 服务器,不是 PowerShell 进程本身收发 SMB 数据包。

net use 对比:底层复用同一套 SMB 客户端内核组件;New-SmbMapping 是 PowerShell 托管包装,支持对象输出、管道、更细粒度参数(区分永久 / 临时、凭据分离、多会话管理)。

二、依赖文件

文件 角色
SmbClient.dll SMB Client 管理库,New-SmbMapping 底层 API 实现,处理映射创建 / 删除 / 枚举
Microsoft.Windows.SmbClient.Commands.dll PowerShell cmdlet 本体,SmbClient 模块,导出New-SmbMappingGet-SmbMapping等命令
mrxsmb20.sys SMB2/3 内核重定向器驱动(核心),内核态处理 SMB2/3 协议、I/O 转发、TreeConnect、会话管理
mrxsmb.sys 旧版 SMB1 重定向器(已默认禁用)
srvcli.dll 用户态 SMB 客户端辅助库,处理凭据、安全上下文、会话协商
secur32.dll 安全支持提供者,提供 Kerberos / NTLM 身份认证接口
kerberos.dll / msv1_0.dll 身份认证包,Kerberos 域认证、NTLM 本地认证
mpr.dll Windows 多提供程序路由器,管理网络盘符(WNet API,传统 net use 依赖,SMB 映射底层也复用)
powershell.exe / pwsh.exe PowerShell 主机,加载 SmbClient 模块,执行 cmdlet

三、依赖关系

  1. 内核依赖:mrxsmb20.sys 必须正常加载 SMB2/3 重定向器驱动未加载 / 禁用,映射创建会直接失败。
  2. 网络栈依赖:tcpip.sys SMB over TCP 445 端口(SMB2/3);如果是老旧 SMB1 会使用 139 端口。网络连通性、防火墙放行 445 是前置条件。
  3. 身份依赖:安全支持提供者 (SSP)
    • 域环境:优先 Kerberos,依赖 AD 域控、DNS 解析(解析服务器主机名)
    • 工作组:使用 NTLM,依赖目标服务器 SMB 服务启用
  4. 模块依赖 PowerShell 加载 SmbClient 模块;该模块仅在 Windows 桌面 / 服务器系统自带;Linux/macOS PowerShell 无此 cmdlet(跨平台 PS 没有原生 Windows SMB 客户端模块)。
  5. 会话与用户上下文 SMB 映射绑定当前用户会话;默认使用当前登录用户凭据;可通过 -UserName -Password 传入替代凭据,创建分离凭据的 SMB 会话。
  6. 盘符管理依赖 创建盘符映射依赖 Windows DOS 设备命名空间;盘符已被占用则创建失败。

四、配套链(配套组件、配套协议、配套命令)

配套系统组件

  1. SMB 客户端(SmbClient):维护 SMB 会话池、映射表
  2. LanmanWorkstation(工作站服务)mrxsmb20.sys 的用户态配套服务,关键!该服务停止,所有 SMB 映射失效
  3. 安全组件:SSP、Kerberos/NTLM 认证包、凭据管理器(CredMan,保存持久 SMB 凭据)

配套协议

  1. SMB 2.0/2.1/3.0/3.1.1(现代默认);SMB1 为遗留协议,默认关闭
  2. TCP/IP(445 端口)
  3. 名称解析:DNS / LLMNR / NBT-NS(用来解析 SMB 服务器主机名,前面加固关闭 LLMNR+NBT 后,只能依靠 DNS 或 IP 访问
  4. Kerberos(域环境) / NTLM(工作组)

配套 PowerShell Cmdlet

  • Get-SmbMapping 查询现有映射
  • Remove-SmbMapping 删除映射
  • Get-SmbSession 查看 SMB 底层会话
  • Get-SmbOpenFile 查看远端打开的文件句柄

五、逻辑链路(完整时序)

New-SmbMapping -LocalPath Z: -RemotePath \\fileserver01\share01

  1. PowerShell 加载 Microsoft.Windows.SmbClient.Commands.dll,执行New-SmbMapping cmdlet
  2. Cmdlet 调用 SmbClient.dll 的 Win32 SMB 映射 API
  3. API 请求 LanmanWorkstation 服务,准备建立 SMB 连接
  4. 系统解析fileserver01主机名:DNS →(可选 LLMNR)→(可选 NBT-NS);加固后 LLMNR/NBT 关闭,只能 DNS/IP
  5. 与远端服务器 445 端口建立 TCP 连接,协商 SMB 协议版本
  6. 执行身份认证(Kerberos 优先,失败回退 NTLM;使用当前凭据或传入的-Credential
  7. 认证成功 → 发起 Tree Connect,访问\\fileserver01\share01共享
  8. 内核 mrxsmb20.sys:把这个 Tree 连接绑定到本地 DOS 设备名 \DosDevices\Z:,注册盘符映射
  9. 写入 SMB 客户端内存映射表;若-Persistent $true,写入用户注册表,登录自动重建
  10. 返回 SMB Mapping 对象给 PowerShell;上层应用访问 Z 盘时,I/O 由 mrxsmb20.sys 拦截并转发到远端 SMB 服务器

删除映射:Remove-SmbMapping 反向流程,断开 Tree 连接、销毁盘符绑定,可选关闭 SMB Session。

六、边界约束(边界、限制、坑点)

1. 平台边界

  • Windows内置 SmbClient 模块;PowerShell Core(跨平台 Linux/macOS)没有 New-SmbMapping,不能直接使用。
  • 最低系统版本:Windows 8 / Windows Server 2012;Win7/2008R2 无此 cmdlet,只能用net use

2. 用户会话边界

  • SMB 映射按登录用户会话隔离:A 用户创建的 Z 盘映射,B 用户登录看不到;不是全局机器级映射
  • 提升的管理员会话和普通会话是分开的(UAC 隔离):普通用户创建的映射,管理员 elevated 窗口默认看不见(经典坑)。

3. 持久化边界

  • -Persistent $true:写入当前用户注册表 HKCU\Network\;仅该用户登录自动重建;机器重启、用户注销,内存内临时映射丢失。
  • 持久映射保存凭据在 CredMan;凭据过期 / 修改会导致自动重连失败。

4. 名称解析边界(关联前面 LLMNR/NBT 加固)

如果使用短主机名\\fileserver01\share),关闭 LLMNR+NBT 后,必须内网 DNS 能解析该主机名,否则映射直接失败;改用 IP \\192.168.1.100\share 不受名称解析影响。

5. 协议边界

  • New-SmbMapping 只是客户端映射管理接口不控制远端 SMB 服务器(LanmanServer 服务)
  • 不直接控制 SMB 加密、签名;SMB 签名 / 加密是 LanmanWorkstation 安全配置,在会话协商阶段生效,不属于 cmdlet 参数。

6. 安全边界

  • -Credential 参数提供的凭据,仅用于本次 SMB 会话;凭据存在客户端凭据管理器,存在凭证窃取风险
  • 映射本身不会绕过 SMB 签名、NTLM 阻止策略;如果组策略禁用 NTLM,工作组场景 SMB 连接会失败。
  • 只能创建客户端侧映射;无法在远端服务器创建共享(创建远端共享用New-SmbShare,在服务器端执行)。

7. 常见坑边界

  1. 盘符占用:LocalPath Z: 已存在,直接报错。
  2. 防火墙:本地出站 445 被阻断,TCP 握手失败。
  3. 服务器侧:远端 LanmanServer 未启动、共享权限 / NTFS 权限拒绝、共享最大连接数已满。
  4. 网络中断:网络掉线后映射显示 “断开”;持久映射不会自动持续重连,访问时触发自动重连。
  5. SMB1 依赖:如果服务器仅支持 SMB1,客户端必须手动启用 SMB1(不推荐,高危)。

New-SmbMapping 是 PowerShell 中用于创建 SMB(Server Message Block)共享映射的 cmdlet,通常用于在本地计算机上映射共享文件夹(通过 UNC 路径)。它可以帮助自动化文件共享的连接管理,常用于将网络共享映射为驱动器字母,或与域凭据进行集成。

以下是 New-SmbMapping 的功能分类,涵盖了其常见用法、参数以及如何根据不同需求使用该 cmdlet:

功能类别 功能描述 PowerShell 命令及参数 说明
创建 SMB 映射 映射一个共享路径到本地驱动器字母 New-SmbMapping -LocalPath "Z:" -RemotePath "\\server\share" 将网络共享路径 \\server\share 映射到本地的 Z: 驱动器。
指定凭据 使用特定的用户名和密码进行映射 New-SmbMapping -LocalPath "Z:" -RemotePath "\\server\share" -Credential (Get-Credential) 提示用户输入凭据或使用 Get-Credential 来输入登录凭据。
自动重新连接映射 启用在每次计算机启动时自动重新连接映射的选项 New-SmbMapping -LocalPath "Z:" -RemotePath "\\server\share" -Persistent $true 设置共享映射为持久连接,确保在计算机重启后自动重新连接。
指定域凭据 使用指定的域凭据进行映射 New-SmbMapping -LocalPath "Z:" -RemotePath "\\server\share" -Credential "DOMAIN\username" 使用域名、用户名进行凭据映射。
映射网络共享文件夹 映射一个共享文件夹并指定网络路径 New-SmbMapping -LocalPath "Z:" -RemotePath "\\server\share" 将远程共享文件夹映射到本地驱动器。
断开当前映射 可在映射前检查和断开已有的映射 New-SmbMapping -LocalPath "Z:" -RemotePath "\\server\share" -Force 使用 -Force 参数强制映射,即使该驱动器字母已被占用。
映射网络共享到驱动器字母 映射到指定驱动器字母,如 Z: 等 New-SmbMapping -LocalPath "Z:" -RemotePath "\\server\share" 映射到指定的本地驱动器字母。
不显示密码 映射时避免显示密码字段,提供隐私保护 New-SmbMapping -LocalPath "Z:" -RemotePath "\\server\share" -Credential (New-Object System.Management.Automation.PSCredential("username", (ConvertTo-SecureString "password" -AsPlainText -Force))) 提供加密形式的密码,避免在命令行中直接显示密码。
映射到指定的共享文件夹 映射到文件共享时指定网络驱动器路径 New-SmbMapping -LocalPath "Z:" -RemotePath "\\server\folder\share" 映射到特定的共享文件夹路径,确保连接到正确的目录。

主要参数说明:

  • -LocalPath: 指定本地计算机上用于映射的驱动器字母(如:"Z:")。
  • -RemotePath: 指定要映射的共享文件夹的 UNC 路径(如:"\\server\share")。
  • -Credential: 指定用于连接到共享资源的凭据,通常通过 Get-Credential 来提供。
  • -Persistent: 设置映射是否在计算机重启后保持(如:$true 表示持久映射)。
  • -Force: 如果指定的驱动器字母已经被占用,强制重新映射。

示例:

  1. 将共享文件夹映射为驱动器 Z:

    powershellCopy Code
    New-SmbMapping -LocalPath "Z:" -RemotePath "\\server\share"
  2. 使用指定凭据将共享文件夹映射为驱动器 Z:

    powershellCopy Code
    New-SmbMapping -LocalPath "Z:" -RemotePath "\\server\share" -Credential (Get-Credential)
  3. 将共享文件夹映射为驱动器 Z:,并设置为持久映射:

    powershellCopy Code
    New-SmbMapping -LocalPath "Z:" -RemotePath "\\server\share" -Persistent $true
  4. 强制重新映射共享文件夹,覆盖现有映射:

    powershellCopy Code
    New-SmbMapping -LocalPath "Z:" -RemotePath "\\server\share" -Force

 

New-SmbMapping 是一个非常实用的 PowerShell cmdlet,用于映射网络共享路径。它支持多种功能,如凭据输入、持久化映射、强制覆盖等,帮助管理员灵活地管理网络共享资源。


New-SmbMapping命令在PowerShell中用于创建新的SMB映射,其主要参数如下:

  1. RemotePath:指定远程共享的路径。可以是网络共享的UNC路径,如\\server\share

  2. LocalPath:指定本地计算机上的映射路径,通常是一个驱动器号或者文件夹路径。例如,Z:C:\Share

  3. Credential:用于连接远程共享的凭据对象。可以使用Get-Credential命令获取凭据对象,如 $cred = Get-Credential,然后将其作为参数传递给-Credential $cred

  4. Scope:指定映射的作用范围。可以是当前会话 (Session) 或者是永久性的 (Persistent)。永久性映射将会在用户重新启动计算机后仍然存在。

  5. Description:可选参数,用于提供映射的描述信息。

  6. AccessMode:指定访问模式,可以是Read(只读)或ReadWrite(读写)。

  7. Force:可选参数,如果指定了这个参数,将会强制创建映射,即使目标路径已经存在其他映射。

  8. Confirm:在创建映射之前,确认操作。

  9. WhatIf:显示执行操作的结果,但不实际执行操作。

这些参数使得New-SmbMapping命令非常灵活,可以根据需要创建和管理SMB映射,方便用户在Windows环境中访问远程共享资源。


PowerShell中的New-SmbMapping命令用于在当前会话中创建一个新的 SMB 映射(SMB share)。这个命令通常用于在 PowerShell 脚本中或交互式会话中连接到远程共享文件夹或网络驱动器。以下是它的功能和作用:

  1. 连接到共享文件夹

    • 可以使用New-SmbMapping命令连接到远程的 SMB 共享文件夹,这允许用户在本地文件系统中访问远程共享的文件和文件夹。
  2. 网络驱动器映射

    • New-SmbMapping命令可以将远程共享映射为本地计算机上的网络驱动器。这样做可以方便用户在文件资源管理器或通过命令行访问共享内容,就像访问本地驱动器一样。
  3. 脚本和自动化

    • 对于脚本和自动化任务,New-SmbMapping可以在脚本中使用,允许程序员和系统管理员动态地创建和管理共享映射,从而简化和自动化文件传输和访问任务。
  4. 参数设置

    • 通过New-SmbMapping命令,可以指定远程共享的路径、本地驱动器的名称、凭据等选项,以确保连接的安全性和正确性。

示例用法如下:

powershellCopy Code
New-SmbMapping -RemotePath "\\server\share" -LocalPath "Z:" -Credential $cred

这条命令将远程的 \\server\share 共享映射为本地的 Z: 驱动器,使用提供的凭据($cred)。这样,用户可以通过 Z: 驱动器访问远程共享的文件和文件夹。

 New-SmbMapping是一个强大的 PowerShell 命令,用于在 Windows 系统中管理和连接到 SMB 共享,适用于自动化任务和管理远程文件访问。


使用New-SmbMapping命令在PowerShell中创建一个新的SMB映射:

powershellCopy Code
# 获取远程共享的凭据
$cred = Get-Credential

# 创建新的SMB映射
New-SmbMapping -RemotePath "\\server\share" -LocalPath "Z:" -Credential $cred -Description "Remote Share Mapping"

# 确认映射是否成功创建
Get-SmbMapping

解释说明:

  1. Get-Credential命令用于获取远程共享的凭据。执行此命令后,会提示用户输入用户名和密码,并将其保存在变量 $cred 中。

  2. New-SmbMapping命令创建新的SMB映射。参数包括:

    • -RemotePath "\\server\share":指定要映射的远程共享路径。
    • -LocalPath "Z:":指定本地计算机上的映射路径,这里将远程共享映射为本地的 Z: 驱动器。
    • -Credential $cred:指定之前获取的远程共享的凭据。
    • -Description "Remote Share Mapping":可选参数,提供了映射的描述信息。
  3. Get-SmbMapping命令用于确认映射是否成功创建。它会列出当前计算机上所有的SMB映射,包括我们刚刚创建的那个。

通过这个示例,你可以在PowerShell中实现远程共享文件夹到本地驱动器的映射,方便在命令行或文件资源管理器中访问远程文件。


使用PowerShell中的New-SmbMapping命令时,通常需要考虑以下步骤和参数:

  1. 获取凭据

    • 使用 Get-Credential 命令获取连接到远程共享所需的凭据。
  2. 创建新的SMB映射

    • 使用 New-SmbMapping 命令创建新的SMB映射。
    • 参数包括:
      • -RemotePath: 指定远程共享的路径,如 \\server\share
      • -LocalPath: 指定本地计算机上的映射路径,例如 Z: 或 C:\Share
      • -Credential: 指定用于连接远程共享的凭据对象。
      • -Description (可选): 提供映射的描述信息。
      • -Scope: 指定映射的作用范围,可以是当前会话 (Session) 或永久性 (Persistent)。
      • -AccessMode: 指定访问模式,可以是 Read(只读)或 ReadWrite(读写)。
      • -Force (可选): 如果指定了此参数,将强制创建映射,即使目标路径已存在其他映射。
      • -Confirm (可选): 在执行操作之前进行确认。
      • -WhatIf (可选): 显示执行操作的结果,但不实际执行操作。
  3. 确认映射是否创建成功

    • 使用 Get-SmbMapping 命令来验证新的SMB映射是否成功创建。

示例

以下是一个完整的示例,展示如何使用New-SmbMapping命令:

powershellCopy Code
# 获取远程共享的凭据
$cred = Get-Credential

# 创建新的SMB映射
New-SmbMapping -RemotePath "\\server\share" -LocalPath "Z:" -Credential $cred -Description "Remote Share Mapping"

# 确认映射是否成功创建
Get-SmbMapping

这个示例首先获取用户提供的远程共享凭据,然后使用这些凭据将远程共享路径 \\server\share 映射到本地计算机上的 Z: 驱动器,并提供了一个描述信息。最后,通过 Get-SmbMapping 命令确认新的SMB映射已经成功创建。

通过这些步骤,你可以在PowerShell中方便地管理和创建SMB映射,以便在本地计算机上访问远程共享的文件和文件夹。


 

posted @ 2024-08-01 15:00  suv789  阅读(644)  评论(0)    收藏  举报