创建文件夹、创建 AD 组、将组应用于文件夹并设置权限
Create Folder, Create AD Groups, Apply Groups to Folder and Set Permissions
我正在尝试找到一种更简洁的方法来创建网络共享文件夹,创建与共享匹配的 Active Directory 安全组,然后将权限级别应用于文件夹,同时在脚本。
- 创建文件夹
D:\Test Share
- 分享为测试分享
- 创建广告组
FS-TESTSHARE-R
- 创建广告组
FS-TESTSHARE-RW
- 将这两个组应用到新的共享文件夹
- 将完全读取权限设置为
FS-TESTSHARE-R
- 将完全 Read/Rights 权限设置为
FS-TESTSHARE-RW
- 将完全访问权限设置为
Domain Admins
这是我目前所拥有的,完全不知道如何获得其余部分并使其发挥作用:
$Path = 'c:\TestShare'
# create new folder
$null = New-Item -Path $Path -ItemType Directory
# get permissions
$acl = Get-Acl -Path $path
# add a new permission
$permission = 'domain\FS-TESTSHARE-RW', 'FullControl', 'ContainerInherit, ObjectInherit', 'None', 'Allow'
$rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permission
$acl.SetAccessRule($rule)
# set new permissions
$acl | Set-Acl -Path $path
while asking the questions in the script
为了获得输入,最好使用 .ps1 文件顶部的参数结构,就像这样
param([Parameter(Mandatory=$true, Position=0)][ValidateNotNullOrEmpty()] [string] $Path,
[Parameter(Mandatory=$true, Position=1)][ValidateNotNullOrEmpty()] [string[]] $permission)
然后您可以像这样在启动脚本时提供值
.\yourscript.ps1 -path 'c:\TestShare' -permission ('domain\FS-TESTSHARE-RW', 'FullControl', 'ContainerInherit, ObjectInherit', 'None', 'Allow')
与读取主机相比,这为您提供了一些优势。对于初学者,您可以强制类型和提供的值不为 null 或空,而且它允许预先收集所有值,这意味着脚本可以在自动化场景中使用,不像 Read-Host 只适用于人类输入值。
Creating an Active Directory Security group that matches the Share
您可以使用 Active Directory PowerShell Module 创建和更新群组。
使用 New-ADGroup 命令创建群组
New-ADGroup -Name "FS-TESTSHARE-RW" -SamAccountName "FS-TESTSHARE-RW" -GroupCategory Security -GroupScope Global -DisplayName "Test Share Read-Write" -Path "CN=Users,DC=Fabrikam,DC=Com" -Description "Members of this group have read-write access to the test share"
然后使用Add-ADGroupMember 命令将主体添加到组中。以下示例将主体 User1 和 User2 添加到组 FS-TESTSHARE-RW。
Add-ADGroupMember FS-TESTSHARE-RW User1,User2
至于映射权限,您已经走在正确的道路上,但是我要指出的是,您不应该在脚本中使用 $null 作为值,因为 it is an automatic variable
$null is an automatic variable that contains a NULL or empty value. You
can use this variable to represent an absent or undefined value in commands
and scripts.
我正在尝试找到一种更简洁的方法来创建网络共享文件夹,创建与共享匹配的 Active Directory 安全组,然后将权限级别应用于文件夹,同时在脚本。
- 创建文件夹
D:\Test Share
- 分享为测试分享
- 创建广告组
FS-TESTSHARE-R
- 创建广告组
FS-TESTSHARE-RW
- 将这两个组应用到新的共享文件夹
- 将完全读取权限设置为
FS-TESTSHARE-R
- 将完全 Read/Rights 权限设置为
FS-TESTSHARE-RW
- 将完全访问权限设置为
Domain Admins
这是我目前所拥有的,完全不知道如何获得其余部分并使其发挥作用:
$Path = 'c:\TestShare'
# create new folder
$null = New-Item -Path $Path -ItemType Directory
# get permissions
$acl = Get-Acl -Path $path
# add a new permission
$permission = 'domain\FS-TESTSHARE-RW', 'FullControl', 'ContainerInherit, ObjectInherit', 'None', 'Allow'
$rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permission
$acl.SetAccessRule($rule)
# set new permissions
$acl | Set-Acl -Path $path
while asking the questions in the script
为了获得输入,最好使用 .ps1 文件顶部的参数结构,就像这样
param([Parameter(Mandatory=$true, Position=0)][ValidateNotNullOrEmpty()] [string] $Path,
[Parameter(Mandatory=$true, Position=1)][ValidateNotNullOrEmpty()] [string[]] $permission)
然后您可以像这样在启动脚本时提供值
.\yourscript.ps1 -path 'c:\TestShare' -permission ('domain\FS-TESTSHARE-RW', 'FullControl', 'ContainerInherit, ObjectInherit', 'None', 'Allow')
与读取主机相比,这为您提供了一些优势。对于初学者,您可以强制类型和提供的值不为 null 或空,而且它允许预先收集所有值,这意味着脚本可以在自动化场景中使用,不像 Read-Host 只适用于人类输入值。
Creating an Active Directory Security group that matches the Share
您可以使用 Active Directory PowerShell Module 创建和更新群组。
使用 New-ADGroup 命令创建群组
New-ADGroup -Name "FS-TESTSHARE-RW" -SamAccountName "FS-TESTSHARE-RW" -GroupCategory Security -GroupScope Global -DisplayName "Test Share Read-Write" -Path "CN=Users,DC=Fabrikam,DC=Com" -Description "Members of this group have read-write access to the test share"
然后使用Add-ADGroupMember 命令将主体添加到组中。以下示例将主体 User1 和 User2 添加到组 FS-TESTSHARE-RW。
Add-ADGroupMember FS-TESTSHARE-RW User1,User2
至于映射权限,您已经走在正确的道路上,但是我要指出的是,您不应该在脚本中使用 $null 作为值,因为 it is an automatic variable
$null is an automatic variable that contains a NULL or empty value. You can use this variable to represent an absent or undefined value in commands and scripts.