使用 powershell 为目录中的每个文件夹创建新的 SMB 共享

Create New SMB Share for every folder in a directory using powershell

我想为 windows 下目录中的每个文件夹创建一个新的 SMB 共享,让 smb 共享名称与文件夹名称相同,并将帐户“Everyone”设置为“完全访问”对于共享权限(因此不是 NTFS 权限)

例如我有以下文件夹

然后共享名称应适当命名,因此 Folder1、Folder2、Folder3

我知道如何创建单个 smb 共享并使用以下命令设置具有完全访问权限的本地用户:

New-SmbShare -name "Test" -path "D:\Test" -FullAccess "TestServer\TestAccount"

我目前失败的地方是以某种方式获取所有文件夹名称并相应地创建共享。另外,我不知道如何告诉 PowerShell 帐户“Everyone”。

编辑:

当我按照你提到的方式尝试时,出现以下错误

New-SmbShare: The trust relationship between this workstation and the primary domain failed.

At line:2 char:1
+ New-SmbShare -Name $_.Name -Path $._FullName -FullAccess Everyone
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (MSFT_SMBShare:ROOT/Microsoft/Windows/SMB/MSFT_SMBShare) [New-SmbShare], CimException
+ FullyQualifiedErrorId : Windows System Error 1789,New-SmbShare

既然我可以手动设置这个组的权限,我不知道为什么我在这里需要访问域。 我知道 Well-Known SID“World”或“Everyone”的字符串值为 S-1-1-0,也许您必须将“-FullAccess Everyone”替换为“FullAccess S-1-1-0”?但这对我不起作用..

来源: https://docs.microsoft.com/en-us/windows/win32/secauthz/well-known-sids

编辑2
OS 是德语,所以我必须将“Everyone”改为德语对应的 (="Jeder")

使用Get-ChildItem -Directory枚举所有文件夹:

Get-ChildItem path\to\root\directory -Directory |ForEach-Object {
  New-SmbShare -Name $_.Name -Path $_.FullName -FullAccess Everyone
}

无论 OS 语言如何,要生成 Everyone 的正确翻译,请使用其众所周知的 SID:

$everyoneSID = [System.Security.Principal.SecurityIdentifier]::new('S-1-1-0')
$everyoneName = $everyoneSID.Translate([System.Security.Principal.NTAccount]).Value

Get-ChildItem path\to\root\directory -Directory |ForEach-Object {
  New-SmbShare -Name $_.Name -Path $_.FullName -FullAccess $everyoneName
}