创建家庭驱动器的脚本

时间:2015-07-08 21:01:07

标签: powershell active-directory windows-server-2012-r2

我正在尝试创建一个小脚本,在我们的文件服务器上创建一个文件夹,创建共享,在共享上设置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

它告诉我共享已经创建,即使它不是。有什么想法吗?

1 个答案:

答案 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,向用户显示他们实际可以访问的文件夹。