You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:24:01