通过PowerShell在Win2012中共享

通过PowerShell在Win2012中共享,powershell,permissions,share,Powershell,Permissions,Share,我是PowerShell的新手,需要创建脚本,该脚本在Windows Server 2012上创建文件夹,并将其设置为具有权限的共享:人人阅读,网络服务完整 我写了下面的脚本 Import-Module SmbShare Import-Module SmbWitness function CreateFolderIfNotExists([string]$Path) { if (!(Test-Path $Path)) { New-Item -ItemType Di

我是PowerShell的新手,需要创建脚本,该脚本在Windows Server 2012上创建文件夹,并将其设置为具有权限的共享:人人阅读,网络服务完整

我写了下面的脚本

Import-Module SmbShare
Import-Module SmbWitness

function CreateFolderIfNotExists([string]$Path)
{
    if (!(Test-Path $Path))
    {
        New-Item -ItemType Directory -Force -Path $Path
        return $True
    }

    return $False
}

if (CreateFolderIfNotExists -Path "C:\DataExport")
{
    New-SmbShare –Name "DataExport" –Path "C:\DataExport" –FullAccess "NETWORK SERVICE" –ReadAccess "Everyone"
}
脚本创建文件夹,启用共享,但设置文件夹权限,而不设置共享权限-这意味着,如果我显示DataExport文件夹的属性,选项卡共享。如果我使用高级共享…按钮和权限按钮,我会正确地看到权限,但如果我使用共享…按钮,则不会设置权限

如果我尝试连接到共享文件夹,则我没有访问共享文件夹的权限

有什么方法可以设置文件夹的共享吗?

最后我找到了一个工具(该工具目前已弃用,但可以使用),通过该工具我可以设置共享权限:

function GrantSharePermission([string]$Path, [string]$User, [string]$Permission)
{
    $Command = "cacls " + $Path + " /G " + $User + ":" + $Permission + " /T /E"
    iex $Command
}

cacls是一个很好的工具,但它设置文件权限(右键单击文件或文件夹时显示在“安全”选项卡上),而不是共享权限。您应该了解,用户或组对共享的有效权限是两者中限制性更强的。因此,如果您对共享权限进行了更改,但仅对文件系统进行了读取/执行,则该用户的有效权限将在该区域中读取/执行

如果您喜欢使用CACL,rmtshare.exe是另一个不推荐使用的工具,它可以做您想做的事情。cacls将设置文件权限,rmtshare将处理共享。你必须四处看看才能找到它,在我的工作中,我们使用的是资源工具包中的旧版本

RMT共享使用示例:

 rmtshare \\servername\sharename=C:\Websites\wwwroot /remark:"Website Share"
 rmtshare \\servername\sharename /grant Administrators:F /grant system:f /remove everyone
 rmtshare \\servername\sharename /grant "servername\Local Website Users":C
 rmtshare \\servername\sharename /grant "servername\Local Website Viewers":R