繁体   English   中英

为什么我不能将驱动器映射到由 PowerShell 脚本创建的用户

[英]Why can't I map drive to users that was created by PowerShell script

我尝试使用 PowerShell 脚本自动将驱动器映射到用户。

该脚本使用以下命令创建用户:

New-ADUser -Name $userName -GivenName $userName -Surname $userName -DisplayName $userName -Path "OU=Eng,DC=lovely,DC=Local" -SamAccountName $userName -AccountPassword (ConvertTo-SecureString $pass -AsPlainText -Force) -UserPrincipalName ($userName + '@lovely.local') -Enable $true -HomeDrive 'H:' -HomeDirectory "\\DC01\Private\$userName"

用户已创建,但当我登录到用户帐户时,未映射驱动器,也未创建“私有”共享中的用户文件夹。

然后我尝试从客户端手动映射它,并收到此错误消息:

无法创建映射驱动器,因为发生了以下错误:指定的网络资源或驱动器不再可用

所以我在服务器中创建了用户文件夹(路径: C:\\Private\\user1 ),我可以手动映射它。

因此,我断开了驱动器的连接,并打开了用户配置文件选项卡( AD 用户和计算机 → OU → user1 → 配置文件)并再次手动键入相同的路径:

\\DC01\Private\user1

一旦我再次登录,驱动器就会被映射!

为什么会这样?

  • 服务器(2016 标准)作为虚拟机安装在 VirtualBox 上,客户端是 Windows 8,也是一个虚拟机。
  • Windows 防火墙已禁用,Windows Defender 也是如此。
  • Windows 8 计算机是域中的成员。
  • “私有”共享属性:

    共享权限“\\DC01\\Private”:经过身份验证的用户(完全控制)

    NTFS 权限“C:\\Private”:SYSTEM(完全控制)、Administrators(完全控制)、CREATOR OWNER(完全控制、仅子文件夹和文件)、Authenticated Users(完全控制)

同样,当我手动创建一个新用户时,映射过程工作正常。

完整的脚本:

Import-Module ActiveDirectory

#-----------------#
# Global Var
#-----------------#
$pass = 'Pa$$w0rd'
$drive_letter = 'H:'
$dir_path = '\\DC01\Private'

#-----------------#
# Eng department
#-----------------#
$totalusers = 9
$uname = "Eng"
$ou = "Eng"

for ($i=0; $i -lt $totalusers; $i++) {
    $userID = "{0:00}" -f ($i + 1)
    $userName = "$uname$userID"
    Write-Host "Creating AD user" ($i + 1) "of" $totalusers ":" $userName
    New-ADUser -Name $userName -DisplayName $userName -Path "OU=$ou,DC=lovely,DC=Local" -SamAccountName $userName -AccountPassword (ConvertTo-SecureString $pass -AsPlainText -Force) -UserPrincipalName ($userName + '@lovely.local') -HomeDrive $drive_letter -HomeDirectory "$dir_path\$userName" -Enable $true
}

正如 Rohin Sidharth 和 eckes 在评论中所写,当我在脚本中为每个用户创建目录时,问题解决了。 GUI 有一些功能,可以在用户第一次登录时创建文件夹。

现在每个登录的用户都可以自动看到他的主文件夹

编辑:

我添加了一个 for 循环来创建每个部门目录。 现在每个用户只能访问他的目录,在一个带有部门名称的目录中(并且只有部门用户可以访问该目录)。

foreach ($o in $ous){

Write-Host "Creating OU: " $o
NEW-ADOrganizationalUnit $o

Write-Host "Create Group $o"
New-ADGroup -Name "$o" -SamAccountName $o -GroupCategory Security -GroupScope Global -DisplayName "$o" -Path "CN=Users,DC=lovely,DC=local" -Description "$o department"  

# Create department dir
New-Item -Path "$dir\$o" -ItemType Directory   

$colRights = [System.Security.AccessControl.FileSystemRights]"Read, Write,Traverse"
$InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::None 
$PropagationFlag = [System.Security.AccessControl.PropagationFlags]::InheritOnly 
$objType =[System.Security.AccessControl.AccessControlType]::Allow 
$objUser = New-Object System.Security.Principal.NTAccount("$o") 
$objACE = New-Object System.Security.AccessControl.FileSystemAccessRule ($objUser, $colRights, $InheritanceFlag, $PropagationFlag, $objType) 
$objACL = Get-ACL "$dir\$o" 
$objACL.AddAccessRule($objACE) 
Set-ACL "$dir\$o" $objACL

}

在这里,我在一个部门创建用户,例如:

$totalusers = 6
$uname = "Manager"
$ou = "Projects"
for ($i=0; $i -lt $totalusers; $i++) 
 { 
 $userID = "{0:00}" -f ($i + 1)
 $userName = "$uname$userID"
Write-Host "Creating AD user" ($i + 1) "of" $totalusers ":" $userName

# create user folder inside the share
CreateUserHomeDir -dir $dir -ou $ou -userName $userName 
New-ADUser -Name $userName -DisplayName $userName -Path "OU=$ou,DC=lovely,DC=Local" -SamAccountName $userName -AccountPassword (ConvertTo-SecureString $pass -AsPlainText -Force) `
-userPrincipalName ($userName + '@lovely.local') -Enable $true -HomeDrive $drive_letter -HomeDirectory "$dir_path\$ou\$userName"


SetDirPermissions -ou $ou -userName $userName -dir $dir 

# add to group
AddToGroup -groupName $ou -userName $userName
}

职能:

function AddToGroup ($groupName, $userName)
 {
 Add-ADGroupMember $groupName $userName
}
function CreateUserHomeDir ($dir, $ou, $userName) {

New-Item -Path "$dir\$ou\$userName" -ItemType Directory
}

function SetDirPermissions ($ou,$userName,$dir) {
    $colRights = [System.Security.AccessControl.FileSystemRights]"Read, Write,Traverse"
    $InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::None 
    $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::InheritOnly 
    $objType =[System.Security.AccessControl.AccessControlType]::Allow 
    $objUser = New-Object System.Security.Principal.NTAccount("$userName") 
    $objACE = New-Object System.Security.AccessControl.FileSystemAccessRule ($objUser, $colRights, $InheritanceFlag, $PropagationFlag, $objType) 
    $objACL = Get-ACL "$dir\$ou\$userName" 
    $objACL.AddAccessRule($objACE) 
    Set-ACL "$dir\$ou\$userName" $objACL

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM