代码之家  ›  专栏  ›  技术社区  ›  csteel217

如何使用从Active Directory获取的新数据将新行添加到阵列中?

  •  1
  • csteel217  · 技术社区  · 2 年前

    我是Powershell的新手,我正在尝试从这个脚本创建一个.csv文件输出,我可以快速使用它上传到数据库中。

    它工作得很好,并按照我希望的方式输出,但我一次只能处理一个用户。

    我设置了一个循环,该循环将贯穿整个脚本,但我缺少了需要数组在新行上输出的部分。

    有什么建议吗?

    Import-Module ActiveDirectory
    
    [string]$script:iviisID = Read-Host "Enter iViis ID number"
    
    $AddUser = {
    
        $script:name = Read-Host "Enter username (first.last)"
        
        $script:number = Read-Host "Enter users Phone Number"
    
        $script:gender = Read-Host "Enter 1 for Male, 2 for Female"
    
        if ($gender -eq 1)
        {
            $script:gender = "Male"
        } else
        {
            $script:gender = "Female"
        }
    
        $script:role = Read-Host "Enter 1 for Foreman, 2 for Contract Manager"
    
        if ($role -eq 1)
        {
            $script:role = "Foreman@er"
        } else
        {
            $script:role = "ContractManager@er"
        }
    
        $user = Get-ADUser -identity $name -Properties *
    
        $firstName = $user | foreach {$_.givenName}
        $lastName = $user | foreach {$_.sn}
        $employeeID = $user | foreach {$_.employeeID}
        $email = $user | foreach {$_.mail}
    
        $array =@(
            [PSCustomObject] @{
            FirstName = $firstName
            Surname = $lastName
            FirstNames = $firstName
            LastName = $lastName
            EMPLOYEEID = $script:iviisID
            PGID = $employeeID
            EmployeeCode = $script:iviisID
            UserID = [string]$script:iviisID + "@er"
            ENABLEDFLAG = "1"
            EmailAddress = $email
            PersonalPhoneNumber = $number
            Role = $role
            Password = "plant.box.dog"
            Gender = $gender
            PreferredName = $firstName
            Category = "Employee"
            }
        )
    
        $newUser = Read-Host "Would you like to add another user? (y/n)"
    
        if($newUser -eq "y")
        {
            [int]($script:iviisID) = $iviisID
            $script:iviisID++
    
    
    
            &$AddUser
        }
        else
        {
            $array | Export-CSV -NoTypeInformation -Path C:\Test\Employees.csv
        }
    }
    
    &$AddUser
    

    这是我的代码示例,如果我运行它,它最终会给我一个.csv,其中只有我运行的循环的最新运行,但我无法保留我已经添加的信息。

    如果我创建这个的方式有点奇怪,我很抱歉,因为我只是在学习Powershell并进行实验,但如果有人能指导我朝着正确的方向前进或提出任何建议,请告诉我:)

    编辑:添加了缺失的代码

    1 回复  |  直到 2 年前
        1
  •  0
  •   Santiago Squarzon    2 年前

    您的代码的问题,您的Csv只获得最后一个创建的用户的原因是 对的每次递归调用 $AddUser scriptblock正在覆盖以前的Csv文件 ,您的代码可以通过添加 -Append :

    $array | Export-CSV -NoTypeInformation -Path C:\Test\Employees.csv -Append
    

    但是,我建议您使用 while 循环,这样更容易,而且不需要使用 $script: 作用域变量。在这种情况下 虽然 循环被包装在一个外部调用的脚本块中,以便能够将输出从循环直接管道传输到 Export-Csv .

    Import-Module ActiveDirectory
    
    & {
        [int] $iviisID = Read-Host 'Enter iViis ID number'
    
        while ($true) {
            $name = Read-Host 'Enter username (first.last)'
            $number = Read-Host 'Enter users Phone Number'
            $gender = Read-Host 'Enter 1 for Male, 2 for Female'
            if ($gender -eq 1) {
                $gender = 'Male'
            }
            else {
                $gender = 'Female'
            }
    
            $role = Read-Host 'Enter 1 for Foreman, 2 for Contract Manager'
            if ($role -eq 1) {
                $role = 'Foreman@er'
            }
            else {
                $role = 'ContractManager@er'
            }
    
            $user = Get-ADUser -Identity $name -Properties givenName, sn, employeeId, mail
    
            [PSCustomObject] @{
                FirstName           = $user.givenName
                Surname             = $user.sn
                FirstNames          = $firstName
                LastName            = $lastName
                EMPLOYEEID          = $iviisID
                PGID                = $user.employeeID
                EmployeeCode        = $iviisID
                UserID              = [string] $iviisID + '@er'
                ENABLEDFLAG         = '1'
                EmailAddress        = $user.mail
                PersonalPhoneNumber = $number
                Role                = $role
                Password            = 'plant.box.dog'
                Gender              = $gender
                PreferredName       = $firstName
                Category            = 'Employee'
            }
    
            $newUser = Read-Host 'Would you like to add another user? (y/n)'
    
            if ($newUser -eq 'y') {
                $iviisID++
                continue
            }
    
            # if `$newUser` not equal to 'Y' breaks the while loop here
            break
        }
    } | Export-Csv -NoTypeInformation -Path C:\Test\Employees.csv
    
    推荐文章