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 客户端的上层配置管理接口。
- Cmdlet 调用 SMB Client Win32 API,向系统SMB 客户端组件提交映射请求:关联盘符 / 本地别名 + UNC 共享路径 + 凭据选项(持久化、凭据覆盖、域身份)。
- 系统 SMB 客户端(内核态)维护 SMB 连接表 + 会话表 + 映射表:
- SMB Session:客户端 ↔ SMB 服务器的身份会话(凭据、NTLM/Kerberos 认证)
- SMB Tree Connect:会话内访问目标共享
\\server\share - SMB Mapping:把 Tree 连接绑定到本地盘符(DOS 设备名
\DosDevices\Z:)
- 持久化选项 (
-Persistent):将映射写入注册表,用户登录自动重建映射;非持久映射仅当前用户会话有效,注销销毁。 - 文件访问:应用读写 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-SmbMapping、Get-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 |
三、依赖关系
- 内核依赖:mrxsmb20.sys 必须正常加载 SMB2/3 重定向器驱动未加载 / 禁用,映射创建会直接失败。
- 网络栈依赖:tcpip.sys SMB over TCP 445 端口(SMB2/3);如果是老旧 SMB1 会使用 139 端口。网络连通性、防火墙放行 445 是前置条件。
- 身份依赖:安全支持提供者 (SSP)
- 域环境:优先 Kerberos,依赖 AD 域控、DNS 解析(解析服务器主机名)
- 工作组:使用 NTLM,依赖目标服务器 SMB 服务启用
- 模块依赖 PowerShell 加载
SmbClient模块;该模块仅在 Windows 桌面 / 服务器系统自带;Linux/macOS PowerShell 无此 cmdlet(跨平台 PS 没有原生 Windows SMB 客户端模块)。 - 会话与用户上下文 SMB 映射绑定当前用户会话;默认使用当前登录用户凭据;可通过
-UserName-Password传入替代凭据,创建分离凭据的 SMB 会话。 - 盘符管理依赖 创建盘符映射依赖 Windows DOS 设备命名空间;盘符已被占用则创建失败。
四、配套链(配套组件、配套协议、配套命令)
配套系统组件
- SMB 客户端(SmbClient):维护 SMB 会话池、映射表
- LanmanWorkstation(工作站服务):
mrxsmb20.sys的用户态配套服务,关键!该服务停止,所有 SMB 映射失效 - 安全组件:SSP、Kerberos/NTLM 认证包、凭据管理器(CredMan,保存持久 SMB 凭据)
配套协议
- SMB 2.0/2.1/3.0/3.1.1(现代默认);SMB1 为遗留协议,默认关闭
- TCP/IP(445 端口)
- 名称解析:DNS / LLMNR / NBT-NS(用来解析 SMB 服务器主机名,前面加固关闭 LLMNR+NBT 后,只能依靠 DNS 或 IP 访问)
- Kerberos(域环境) / NTLM(工作组)
配套 PowerShell Cmdlet
Get-SmbMapping查询现有映射Remove-SmbMapping删除映射Get-SmbSession查看 SMB 底层会话Get-SmbOpenFile查看远端打开的文件句柄
五、逻辑链路(完整时序)
New-SmbMapping -LocalPath Z: -RemotePath \\fileserver01\share01
- PowerShell 加载
Microsoft.Windows.SmbClient.Commands.dll,执行New-SmbMappingcmdlet - Cmdlet 调用
SmbClient.dll的 Win32 SMB 映射 API - API 请求 LanmanWorkstation 服务,准备建立 SMB 连接
- 系统解析
fileserver01主机名:DNS →(可选 LLMNR)→(可选 NBT-NS);加固后 LLMNR/NBT 关闭,只能 DNS/IP - 与远端服务器 445 端口建立 TCP 连接,协商 SMB 协议版本
- 执行身份认证(Kerberos 优先,失败回退 NTLM;使用当前凭据或传入的
-Credential) - 认证成功 → 发起 Tree Connect,访问
\\fileserver01\share01共享 - 内核 mrxsmb20.sys:把这个 Tree 连接绑定到本地 DOS 设备名
\DosDevices\Z:,注册盘符映射 - 写入 SMB 客户端内存映射表;若
-Persistent $true,写入用户注册表,登录自动重建 - 返回 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. 常见坑边界
- 盘符占用:LocalPath Z: 已存在,直接报错。
- 防火墙:本地出站 445 被阻断,TCP 握手失败。
- 服务器侧:远端 LanmanServer 未启动、共享权限 / NTFS 权限拒绝、共享最大连接数已满。
- 网络中断:网络掉线后映射显示 “断开”;持久映射不会自动持续重连,访问时触发自动重连。
- 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: 如果指定的驱动器字母已经被占用,强制重新映射。
示例:
-
将共享文件夹映射为驱动器 Z:
powershellCopy CodeNew-SmbMapping -LocalPath "Z:" -RemotePath "\\server\share" -
使用指定凭据将共享文件夹映射为驱动器 Z:
powershellCopy CodeNew-SmbMapping -LocalPath "Z:" -RemotePath "\\server\share" -Credential (Get-Credential) -
将共享文件夹映射为驱动器 Z:,并设置为持久映射:
powershellCopy CodeNew-SmbMapping -LocalPath "Z:" -RemotePath "\\server\share" -Persistent $true -
强制重新映射共享文件夹,覆盖现有映射:
powershellCopy CodeNew-SmbMapping -LocalPath "Z:" -RemotePath "\\server\share" -Force
New-SmbMapping 是一个非常实用的 PowerShell cmdlet,用于映射网络共享路径。它支持多种功能,如凭据输入、持久化映射、强制覆盖等,帮助管理员灵活地管理网络共享资源。
New-SmbMapping命令在PowerShell中用于创建新的SMB映射,其主要参数如下:
-
RemotePath:指定远程共享的路径。可以是网络共享的UNC路径,如
\\server\share。 -
LocalPath:指定本地计算机上的映射路径,通常是一个驱动器号或者文件夹路径。例如,
Z:或C:\Share。 -
Credential:用于连接远程共享的凭据对象。可以使用
Get-Credential命令获取凭据对象,如$cred = Get-Credential,然后将其作为参数传递给-Credential $cred。 -
Scope:指定映射的作用范围。可以是当前会话 (
Session) 或者是永久性的 (Persistent)。永久性映射将会在用户重新启动计算机后仍然存在。 -
Description:可选参数,用于提供映射的描述信息。
-
AccessMode:指定访问模式,可以是
Read(只读)或ReadWrite(读写)。 -
Force:可选参数,如果指定了这个参数,将会强制创建映射,即使目标路径已经存在其他映射。
-
Confirm:在创建映射之前,确认操作。
-
WhatIf:显示执行操作的结果,但不实际执行操作。
这些参数使得New-SmbMapping命令非常灵活,可以根据需要创建和管理SMB映射,方便用户在Windows环境中访问远程共享资源。
PowerShell中的New-SmbMapping命令用于在当前会话中创建一个新的 SMB 映射(SMB share)。这个命令通常用于在 PowerShell 脚本中或交互式会话中连接到远程共享文件夹或网络驱动器。以下是它的功能和作用:
-
连接到共享文件夹:
- 可以使用
New-SmbMapping命令连接到远程的 SMB 共享文件夹,这允许用户在本地文件系统中访问远程共享的文件和文件夹。
- 可以使用
-
网络驱动器映射:
New-SmbMapping命令可以将远程共享映射为本地计算机上的网络驱动器。这样做可以方便用户在文件资源管理器或通过命令行访问共享内容,就像访问本地驱动器一样。
-
脚本和自动化:
- 对于脚本和自动化任务,
New-SmbMapping可以在脚本中使用,允许程序员和系统管理员动态地创建和管理共享映射,从而简化和自动化文件传输和访问任务。
- 对于脚本和自动化任务,
-
参数设置:
- 通过
New-SmbMapping命令,可以指定远程共享的路径、本地驱动器的名称、凭据等选项,以确保连接的安全性和正确性。
- 通过
示例用法如下:
New-SmbMapping -RemotePath "\\server\share" -LocalPath "Z:" -Credential $cred
这条命令将远程的 \\server\share 共享映射为本地的 Z: 驱动器,使用提供的凭据($cred)。这样,用户可以通过 Z: 驱动器访问远程共享的文件和文件夹。
New-SmbMapping是一个强大的 PowerShell 命令,用于在 Windows 系统中管理和连接到 SMB 共享,适用于自动化任务和管理远程文件访问。
使用New-SmbMapping命令在PowerShell中创建一个新的SMB映射:
# 获取远程共享的凭据
$cred = Get-Credential
# 创建新的SMB映射
New-SmbMapping -RemotePath "\\server\share" -LocalPath "Z:" -Credential $cred -Description "Remote Share Mapping"
# 确认映射是否成功创建
Get-SmbMapping
解释说明:
-
Get-Credential命令用于获取远程共享的凭据。执行此命令后,会提示用户输入用户名和密码,并将其保存在变量$cred中。 -
New-SmbMapping命令创建新的SMB映射。参数包括:-RemotePath "\\server\share":指定要映射的远程共享路径。-LocalPath "Z:":指定本地计算机上的映射路径,这里将远程共享映射为本地的 Z: 驱动器。-Credential $cred:指定之前获取的远程共享的凭据。-Description "Remote Share Mapping":可选参数,提供了映射的描述信息。
-
Get-SmbMapping命令用于确认映射是否成功创建。它会列出当前计算机上所有的SMB映射,包括我们刚刚创建的那个。
通过这个示例,你可以在PowerShell中实现远程共享文件夹到本地驱动器的映射,方便在命令行或文件资源管理器中访问远程文件。
使用PowerShell中的New-SmbMapping命令时,通常需要考虑以下步骤和参数:
-
获取凭据
- 使用
Get-Credential命令获取连接到远程共享所需的凭据。
- 使用
-
创建新的SMB映射
- 使用
New-SmbMapping命令创建新的SMB映射。 - 参数包括:
-RemotePath: 指定远程共享的路径,如\\server\share。-LocalPath: 指定本地计算机上的映射路径,例如Z:或C:\Share。-Credential: 指定用于连接远程共享的凭据对象。-Description(可选): 提供映射的描述信息。-Scope: 指定映射的作用范围,可以是当前会话 (Session) 或永久性 (Persistent)。-AccessMode: 指定访问模式,可以是Read(只读)或ReadWrite(读写)。-Force(可选): 如果指定了此参数,将强制创建映射,即使目标路径已存在其他映射。-Confirm(可选): 在执行操作之前进行确认。-WhatIf(可选): 显示执行操作的结果,但不实际执行操作。
- 使用
-
确认映射是否创建成功
- 使用
Get-SmbMapping命令来验证新的SMB映射是否成功创建。
- 使用
示例
以下是一个完整的示例,展示如何使用New-SmbMapping命令:
# 获取远程共享的凭据
$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映射,以便在本地计算机上访问远程共享的文件和文件夹。

浙公网安备 33010602011771号