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

如何在PowerShell数组中添加从Active Directory获取的新数据行?

解决PowerShell脚本CSV仅保留最后一条用户记录的问题

问题原因

你的脚本每次执行$AddUser脚本块时,都会重新创建$array数组,只存储当前用户的数据;加上递归调用的方式,导致之前的用户数据无法累积,最终导出CSV时只有最后一条记录。

修改后的完整脚本

Import-Module ActiveDirectory

# 初始化存储所有用户数据的数组
$userArray = @()

# 初始输入iviisID
[int]$iviisID = Read-Host "Enter iViis ID number"

do {
    $name = Read-Host "Enter username (first.last)"
    $number = Read-Host "Enter users Phone Number"
    
    # 处理性别输入
    $genderInput = Read-Host "Enter 1 for Male, 2 for Female"
    $gender = if ($genderInput -eq 1) { "Male" } else { "Female" }

    # 处理角色输入
    $roleInput = Read-Host "Enter 1 for Foreman, 2 for Contract Manager"
    $role = if ($roleInput -eq 1) { "Foreman@er" } else { "ContractManager@er" }

    # 仅获取需要的AD用户属性,提升效率
    $user = Get-ADUser -Identity $name -Properties givenName, sn, employeeID, mail

    # 直接提取AD用户属性,无需foreach
    $firstName = $user.givenName
    $lastName = $user.sn
    $employeeID = $user.employeeID
    $email = $user.mail

    # 创建当前用户的对象
    $userObject = [PSCustomObject] @{
        FirstName            = $firstName
        Surname              = $lastName
        FirstNames           = $firstName
        LastName             = $lastName
        EMPLOYEEID           = $iviisID
        PGID                 = $employeeID
        EmployeeCode         = $iviisID
        UserID               = "$iviisID@er"
        ENABLEDFLAG          = "1"
        EmailAddress         = $email
        PersonalPhoneNumber  = $number
        Role                 = $role
        Password             = "plant.box.dog"
        Gender               = $gender
        PreferredName        = $firstName
        Category             = "Employee"
    }

    # 将当前用户对象添加到全局数组
    $userArray += $userObject

    # 询问是否继续添加用户
    $newUser = Read-Host "Would you like to add another user? (y/n)"
    
    # iviisID自增
    if ($newUser -eq 'y') {
        $iviisID++
    }

} while ($newUser -eq 'y')

# 循环结束后统一导出所有用户数据到CSV
$userArray | Export-CSV -NoTypeInformation -Path C:\Test\Employees.csv

关键修改说明

  • 数组初始化移至外部:$userArray = @()在循环外定义,确保所有用户对象都添加到同一个数组中,不会被覆盖。
  • 替换递归为do-while循环:循环逻辑更直观,避免递归带来的变量作用域混乱,便于数据累积。
  • 优化AD用户属性获取:Get-ADUser仅指定需要的属性,比Properties *更高效,减少不必要的数据加载。
  • 直接提取属性值:无需用foreach遍历单个用户对象,直接通过.访问属性即可。
  • 统一导出CSV:在所有用户添加完成后,一次性导出整个数组,确保所有记录都被写入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:24:58