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

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

问题描述:

我试图使用PowerShell脚本自动将驱动器映射到用户。为什么我无法将驱动器映射到由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上安装为VM,客户端为Windows   8,也是VM。
  • Windows防火墙被禁用,也是Windows Defender。
  • Windows   8机器是域中的成员。
  • “私” 共享属性:

    Share permissions "\DC01\Private": Authenticated Users (Full Control)

    NTFS permissions "C:\Private": SYSTEM (Full Control), Administrators (Full Control), CREATOR OWNER (Full Control, subfolders and files only), Authenticated Users (Full Control)

再次,当我创建一个新用户手动映射过程中工作得很好。

完整的脚本:

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 
} 
+0

这听起来像你只需要创建的文件夹内,这行得通。 – eckes

+0

也许,但你没有使用标签,是不是你的问题是关于什么? – eckes

+1

相关? https://stackoverflow.com/questions/26592223/powershell-homedirectory-not-created-on-fileserver-filesystem –

由于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 

} 
+0

你可以接受你自己的答案(这是一个耻辱,你说不对我的评论,这实际上解决了你的问题,我会作出答案) – eckes

+0

我没有注意到这个错误。我修好了它。谢谢 – ic205

+0

,我对你的第二个评论说'不' – ic205