如何用PowerShell为目录下每个文件夹创建同名SMB共享并设置Everyone完全控制权限
Windows批量创建子文件夹SMB共享解决方案
问题根源说明
- 批量获取子文件夹可通过PowerShell内置的
Get-ChildItem命令实现,可直接筛选指定目录下的所有一级子目录 - 1789域信任报错根因:直接传入
Everyone、S-1-1-0、Jeder这类字符串作为身份参数时,系统会优先向域控制器查询身份有效性,域信任异常时就会触发报错;同时硬编码不同语言的组名兼容性极差 - 你之前的测试代码还存在低级笔误:将属性调用
$_.FullName错写为$._FullName,也会触发执行异常
完整可执行脚本
首先以管理员权限启动PowerShell,将脚本中的$rootPath替换为你要处理的父目录路径即可:
# 配置目标父目录路径 $rootPath = "D:\你的目标父目录" # 构造跨语言兼容的Everyone身份,仅查询本地知名SID,不触发域请求 $everyoneSid = New-Object System.Security.Principal.SecurityIdentifier([System.Security.Principal.WellKnownSidType]::WorldSid, $null) $everyoneAccount = $everyoneSid.Translate([System.Security.Principal.NTAccount]).Value # 遍历所有一级子文件夹创建共享 Get-ChildItem -Path $rootPath -Directory | ForEach-Object { New-SmbShare -Name $_.Name -Path $_.FullName -FullAccess $everyoneAccount }
补充优化版本(避免重复共享报错)
如果需要避免已存在同名共享时的报错,可使用带存在性校验的版本:
# 配置目标父目录路径 $rootPath = "D:\你的目标父目录" $everyoneSid = New-Object System.Security.Principal.SecurityIdentifier([System.Security.Principal.WellKnownSidType]::WorldSid, $null) $everyoneAccount = $everyoneSid.Translate([System.Security.Principal.NTAccount]).Value Get-ChildItem -Path $rootPath -Directory | ForEach-Object { $shareName = $_.Name $sharePath = $_.FullName if (-not (Get-SmbShare -Name $shareName -ErrorAction SilentlyContinue)) { New-SmbShare -Name $shareName -Path $sharePath -FullAccess $everyoneAccount } else { Write-Host "共享 $shareName 已存在,跳过创建" } }
脚本特性说明
- 自动适配多语言系统:德语环境下会自动获取到
Jeder作为组名,无需手动修改 - 无域查询依赖:通过系统内置的知名SID类型构造身份,完全不触发域请求,彻底解决1789信任关系报错
- 仅处理一级子文件夹:不会遍历深层子目录,完全匹配需求场景
内容的提问来源于stack exchange,提问作者bakersfield
相关产品推荐
相关产品推荐

