Powershell 创建主驱动器的脚本

Powershell 创建主驱动器的脚本,powershell,active-directory,windows-server-2012-r2,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 userna

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


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

只要在客户端上安装了,您的任何命令都不需要远程会话(以便
Set ADUser
在本地可用)。可以使用
-CimSession
参数在远程主机上运行

但是,我强烈建议不要单独共享每个userhome。相反,只共享包含userhomes的文件夹(例如
\\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:'

在共享上启用,只向用户提供他们可以实际访问的文件夹。

完全同意这一点,为每个用户创建共享是一个非常糟糕的主意。