我正在尝试创建一个小脚本,在我们的文件服务器上创建一个文件夹,创建共享,在共享上设置ACL,然后通过Active Directory中的主文件夹将共享映射到他们的U:驱动器。
服务器正在运行2012 R2,已安装Active Directory PowerShell模块。
这就是我到目前为止:
$session = new-pssession -ComputerName fileserver
Enter-PSSession $session
$user = read-host 'Input username'
import-module activedirectory
new-item -name $user -itemtype Directory -path "\\fileserver\G$" | out-null
new-smbshare -name "$user$" -path "G:\$user" -ContinuouslyAvailable $true -FullAccess "domain\domain admins" -changeaccess "domain\$user"
Set-ADuser $user -homedirectory "\\fileserver\$user$" -homedrive U:
我使用Enter-PSSession
命令读取不允许远程命令通过,而您需要使用Invoke-Command -ScriptBatch
。
它告诉我共享已经创建,即使它不是。有什么想法吗?
答案 0 :(得分:2)
如果您的客户端上安装了RSAT,那么您的任何命令都不需要远程会话(以便Set-ADUser
在本地可用)。可以使用-CimSession
参数对远程主机运行New-SmbShare
。
但是,我强烈建议不要单独分享每个用户家。而是只共享包含用户家的文件夹(例如\\fileserver\userhomes$
)并将主目录设置为该共享下面的用户文件夹:
$user = Read-Host 'Input username'
$userhome = New-Item -Name $user -Type Directory -Path "\\fileserver\userhomes$"
$acl = Get-Acl -Path $userhome.FullName
$acl.SetAccessRuleProtection($true, $true)
$perm = $user,'FullControl','ContainerInherit','ObjectInherit','None','Allow'
$ace = New-Object Security.AccessControl.FileSystemAccessRule $perm
$acl.SetAccessRule($ace)
$acl | Set-Acl -Path $userhome.FullName
Import-Module ActiveDirectory
Set-ADuser $user -HomeDirectory $userhome.FullName -HomeDrive 'U:'
在共享上启用access-based enumeration,向用户显示他们实际可以访问的文件夹。