首页/系统/Windows 运维速查/PowerShell 管理 SMB 共享
磁盘与文件43 条

PowerShell 管理 SMB 共享

SmbShare 模块完整管理共享:New-SmbShare 创建、Grant-SmbShareAccess 授权、Get-SmbShareAccess 审计、Remove-SmbShare 删除。

Windows 运维速查系统更新于 2026-10-13

用 PowerShell 管共享

SmbShare 模块把共享的创建、授权、审计与删除全部命令化:New-SmbShare 建共享、Grant-SmbShareAccess 授权、Get-SmbShareAccess 查权限、Remove-SmbShare 删除。相比图形界面,它最大的优势是可批量、可留档——一条命令导出全机共享清单与各自的访问权限,直接生成 CSV 归档,权限审计从半天缩短到几分钟。

基本信息

适用平台Windows 8/10/11 与 Windows Server 2012 及以后(SmbShare 模块)
创建/删除New-SmbShare、Remove-SmbShare、Set-SmbShare
授权/回收Grant-SmbShareAccess、Revoke-SmbShareAccess、Block-SmbShareAccess
审计Get-SmbShare、Get-SmbShareAccess、Get-SmbSession、Get-SmbOpenFile
权限档位Full、Change、Read、Custom(以 SDDL 精细指定)
权限要求创建与授权需要管理员;域账户用 域\账户 写法,本机账户用 主机名\账户 写法

典型使用场景

  • 标准化建共享:按命名与权限规范一次性创建,避免人工点选差异
  • 权限审计:导出全机共享与授权清单,核对是否符合最小权限要求
  • 批量调整:统一为某个运维组追加 Change 权限,逐台机器下发
  • 临时共享回收:项目结束后按名字精确删除,同时释放会话
  • 占用排查:查看谁在占用共享文件,必要时关闭句柄以便备份或删除

常用示例

常用示例
Get-SmbShare | Select-Object Name, Path, Description, EncryptData       # 列出全部共享
New-SmbShare -Name Data -Path D:\Data -FullAccess 'DOMAIN\OPS'          # 建共享并授权运维组
Grant-SmbShareAccess -Name Data -AccountName 'DOMAIN\Staff' -AccessRight Change -Force   # 追加授权
Grant-SmbShareAccess -Name Data -AccountName 'Everyone' -AccessRight Read -Force          # 只读档位
Get-SmbShareAccess -Name Data | Select-Object AccountName, AccessControlType, AccessRight   # 查看共享权限
Revoke-SmbShareAccess -Name Data -AccountName 'DOMAIN\Staff' -Force     # 回收授权
Set-SmbShare -Name Data -EncryptData $true -Force                        # 开启 SMB 加密
Remove-SmbShare -Name Data -Force                                        # 删除共享(不删文件,会断开在线会话)

命令与用途对照

命令用途注意
New-SmbShare创建共享并一次性授予权限权限组合尽量显式,别依赖默认值
Grant-SmbShareAccess追加授权同一账户重复授权会报冲突,需 -Force
Get-SmbShareAccess查看共享级权限不含 NTFS 权限,两者取交集生效
Get-SmbSession查看当前连接会话用于确认谁在线、从哪台机器登录
Get-SmbOpenFile查看被打开的文件句柄配合 Close-SmbOpenFile 才能释放占用
Remove-SmbShare删除共享在线会话立即断开,业务可能中断
共享权限与 NTFS 权限取交集:两级里更严格的那个生效。只配一半就授权,典型表现是「明明给了完全控制还是拒绝访问」,排查时两级都要看。
名字以 $ 结尾的共享(如 Data$)不会出现在资源管理器浏览列表中,但仍可通过 \\主机\Data$ 访问;这是隐藏共享的常见做法,不是安全边界。

审计与占用处理

审计与占用处理
Get-SmbShare | ForEach-Object { Get-SmbShareAccess -Name $_.Name } |
  Export-Csv D:\audit\smb_access.csv -Encoding UTF8 -NoTypeInformation      # 权限清单归档
Get-SmbSession | Select-Object ClientComputerName, ClientUserName, NumOpens   # 在线会话
Get-SmbOpenFile | Select-Object ClientUserName, Path, Permissions             # 被占用的文件
Get-SmbOpenFile | Where-Object Path -like 'D:\Data\*' | Close-SmbOpenFile -Force   # 释放占用以便备份
Get-SmbShare -Name Data | Get-SmbShareAccess                                   # 单共享复核
Remove-SmbShare 会立刻断开该共享上的所有在线会话,正在读写大文件或数据库文件的用户会出现中断甚至损坏风险。删除前先确认会话情况与业务窗口,必要时提前通知。

易错点

  • 只配共享权限不配 NTFS 权限(或反之):取交集后仍然拒绝访问,出现「明明授权了却进不去」
  • 给 Everyone 直接发完全控制:任何能登录的账户都能改写共享内容,应改为具名组加最小档位
  • 删除共享时未查看在线会话:正在写入的用户被强制断开,可能造成数据损坏
  • 审计导出后不归档:权限清单是最基础的合规证据,导出即留档、定期比对才有价值
  • 把隐藏共享($ 结尾)当安全措施:只是不显示在浏览列表里,知道名字就能访问

数据来源与参考

  • Microsoft Learn:New-SmbShare
  • Microsoft Learn:Get-SmbShareAccess

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌