You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于CSV用PowerShell创建AD用户:组添加与P盘映射问题

解决AD用户创建脚本的两个问题:组添加与个人共享文件夹映射

现有脚本的问题反馈

  1. CSV分隔符错误:你的CSV文件使用制表符作为列分隔符,但脚本中用了-Delimiter ";",会导致Import-CSV无法正确解析列数据,需改为-Delimiter "t"`。
  2. 缺少用户添加到AD组的逻辑
  3. 缺少个人共享文件夹创建与映射的逻辑

解决方案实现

1. 添加用户到对应AD组

根据用户的Fonction字段,预先定义职位与AD组的映射关系,创建用户后自动将其添加到对应组。

2. 创建个人共享文件夹并映射P盘

  • 在指定服务器路径下创建用户专属文件夹
  • 配置NTFS权限(用户完全控制、管理员完全控制)
  • 共享文件夹
  • 通过AD用户属性设置自动映射P盘(无需额外登录脚本)

修改后的完整脚本

$CSVFile = "C:\Users\Utilisateurs.csv"
# 修正CSV分隔符为制表符
$CSVData = Import-CSV -Path $CSVFile -Delimiter "`t" -Encoding UTF8 

# 定义职位与AD组的映射(根据实际组名修改)
$groupMapping = @{
    "ingénieur SI" = "Groupe_Ingenieurs_SI"
    "Technicien"   = "Groupe_Techniciens"
    "Dev"          = "Groupe_Developpeurs"
    "agent"        = "Groupe_Agents"
}

# 定义共享文件夹根路径(根据实际服务器路径修改)
$shareRoot = "\\Serveur-AD\Partages\Utilisateurs"

Foreach($Utilisateur in $CSVData){
    $UtilisateurPrenom = $Utilisateur.Prenom.Trim()
    $UtilisateurNom = $Utilisateur.Nom.Trim()
    $UtilisateurLogin = ($UtilisateurPrenom).Substring(0,1) + "." + $UtilisateurNom
    $UtilisateurEmail = "$UtilisateurLogin@axeplane.loc"
    $UtilisateurMotDePasse = "IT-Axeplane@2020"
    $UtilisateurFonction = $Utilisateur.Fonction.Trim()
    $OU = $Utilisateur.Ou.Trim()

    # Vérifier la présence de l'utilisateur dans l'AD
    if (Get-ADUser -Filter {SamAccountName -eq $UtilisateurLogin} -ErrorAction SilentlyContinue)
    {
        Write-Warning "L'identifiant $UtilisateurLogin existe déjà dans l'AD"
        continue
    }
    else
    {
        # 创建AD用户
        New-ADUser -Name "$UtilisateurNom $UtilisateurPrenom" `
                    -DisplayName "$UtilisateurNom $UtilisateurPrenom" `
                    -GivenName $UtilisateurPrenom `
                    -Surname $UtilisateurNom `
                    -SamAccountName $UtilisateurLogin `
                    -UserPrincipalName "$UtilisateurLogin@axeplane.loc" `
                    -EmailAddress $UtilisateurEmail `
                    -Title $UtilisateurFonction `
                    -Path $OU `
                    -AccountPassword (ConvertTo-SecureString $UtilisateurMotDePasse -AsPlainText -Force) `
                    -ChangePasswordAtLogon $true `
                    -Enabled $true

        Write-Output "Création de l'utilisateur : $UtilisateurLogin ($UtilisateurNom $UtilisateurPrenom)"

        # 获取刚创建的用户对象
        $user = Get-ADUser -Identity $UtilisateurLogin

        # 1. 添加用户到对应AD组
        $groupName = $groupMapping[$UtilisateurFonction]
        if ($groupName) {
            try {
                Add-ADGroupMember -Identity $groupName -Members $user -ErrorAction Stop
                Write-Output "Ajout de $UtilisateurLogin au groupe $groupName"
            } catch {
                Write-Warning "Échec de l'ajout au groupe $groupName : $_"
            }
        } else {
            Write-Warning "Aucun groupe associé à la fonction : $UtilisateurFonction"
        }

        # 2. 创建个人共享文件夹并映射P盘
        $userFolder = Join-Path -Path $shareRoot -ChildPath $UtilisateurLogin

        # 创建文件夹(如果不存在)
        if (-not (Test-Path -Path $userFolder)) {
            try {
                New-Item -Path $userFolder -ItemType Directory -ErrorAction Stop | Out-Null
                Write-Output "Création du dossier personnel : $userFolder"
            } catch {
                Write-Warning "Échec de la création du dossier : $_"
                continue
            }
        }

        # 设置NTFS权限
        try {
            $acl = Get-Acl -Path $userFolder
            # 添加用户完全控制权限
            $userAccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule(
                "$UtilisateurLogin",
                "FullControl",
                "ContainerInherit,ObjectInherit",
                "None",
                "Allow"
            )
            $acl.AddAccessRule($userAccessRule)
            # 添加管理员完全控制权限
            $adminAccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule(
                "BUILTIN\Administrators",
                "FullControl",
                "ContainerInherit,ObjectInherit",
                "None",
                "Allow"
            )
            $acl.AddAccessRule($adminAccessRule)
            Set-Acl -Path $userFolder -AclObject $acl -ErrorAction Stop
            Write-Output "Configuration des permissions NTFS pour $userFolder"
        } catch {
            Write-Warning "Échec de la configuration des permissions : $_"
        }

        # 共享文件夹(如果未共享)
        if (-not (Get-SmbShare -Name $UtilisateurLogin -ErrorAction SilentlyContinue)) {
            try {
                New-SmbShare -Name $UtilisateurLogin -Path $userFolder -FullAccess "$UtilisateurLogin", "BUILTIN\Administrators" -ErrorAction Stop
                Write-Output "Partage du dossier : $UtilisateurLogin -> $userFolder"
            } catch {
                Write-Warning "Échec du partage du dossier : $_"
            }
        }

        # 设置AD用户自动映射P盘
        try {
            Set-ADUser -Identity $user -HomeDrive "P:" -HomeDirectory $userFolder -ErrorAction Stop
            Write-Output "Configuration du disque P: pour $UtilisateurLogin -> $userFolder"
        } catch {
            Write-Warning "Échec de la configuration du disque P: : $_"
        }
    }
}

关键说明

  • 组映射:修改$groupMapping中的组名为你的实际AD组名称
  • 共享路径:修改$shareRoot为你的实际服务器共享根路径
  • 权限配置:脚本中设置了用户和管理员的完全控制权限,可根据需求调整
  • 自动映射P盘:通过Set-ADUser设置HomeDrive和HomeDirectory,用户登录时系统会自动映射P盘,无需额外登录脚本
  • 错误处理:添加了try/catch和-ErrorAction参数,避免单个步骤失败导致整个脚本中断

内容的提问来源于stack exchange,提问作者Joe H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 21:28:19