如何在PowerShell脚本中导入CSV文件?

时间:2019-07-29 18:56:29

标签: powershell

我正在编写代码,以使用CSV文件中的输入来更新Active Directory。我能够使脚本一直运行到最后,但是当我检查Active Directory时,它没有更新。当我检查日志文件时,它没有列出正在使用的任何CSV文件。一切都在同一个文件夹中,日志文件写得很好。

我尝试将脚本搜索CSV文件的路径更改为C:/ PATH / TO / FILE / filename 我也尝试了使用引号,不使用引号,使用-Path和不使用-Path。我看过其他StackOverflow文章,他们似乎都说这应该可行... 我认为这里的关键是自上而下的第3条。 “ $ Users = Import-csv -Path users.csv”我可能是错的。


        Import-Module ActiveDirectory
        #Import and Specify CSV File
        $Users = Import-csv -Path users.csv
        #Specify Log File
        $LogFile = ".\UpdateUsersCsv.log"

        # Write to the log file. Abort the script if the log file cannot be                 updated.
        Add-Content -Path $LogFile -Value                                 "================================================"
        Add-Content -Path $LogFile -Value "UpdateUsersCsv.ps1"
        Add-Content -Path $LogFile -Value "Update Users from CSV file: $Users"
        Add-Content -Path $LogFile -Value "Started: $((Get-Date).ToString())"
        Add-Content -Path $LogFile -Value "Log file: $LogFile"
        Add-Content -Path $LogFile -Value "------------------------------------------------"

        # Initialize counters.
        $Updated = 0
        $NotFound = 0

        #Find Users
        foreach($User in $Users){
            $ADUser = Get-ADUser
            #If found, update Users and increment $Updated
            If($ADUser){
                Set-ADUser $User.SamAccountName -Description $User.NewDescription
                $Updated = $Updated + 1
            #If not found, increment $NotFound
            }ElseIf(!$ADUser){
                Add-Content -Path $LogFile -Value "User $ASUser not found."
                       $NotFound = NotFound + 1
            }
        }


        Add-Content -Path $LogFile -Value "Number of users updated: $Updated"
        Add-Content -Path $LogFile -Value "Number of users not found: $NotFound"

        Add-Content -Path $LogFile -Value         "================================================"

        Write-Host "Script Completed, check log file $LogFile for more information."

应该使用CSV文件中的任何信息更新Active Directory。例如,如果我使用了:myName,myDescription会放在这里 它应该将名为“ myName”的用户的描述更新为“ myDescription转到此处” 然后,日志文件应遵循以下内容: 从csv文件:nameOfCSV 用户更新= 1 找不到用户= 0

如果找不到该用户,则应相应地报告该问题,但这不是我当前的问题。

运行脚本并打开日志文件时,没有显示csv文件,并且已更新用户和未找到用户字段保留为0。 这使我相信问题在于csv文件未导入。

1 个答案:

答案 0 :(得分:2)

我知道问题出在哪里。如果找到用户,您的代码将仅更新AD。查找AD用户的命令为Get-Aduser -identity <SamAccountName>

在您的代码中,您仅使用了$ADUser = Get-ADUser而没有任何参数。我很惊讶为什么您没有得到任何错误或提示,要求输入-identity参数值。

在您的csv中,您可能会有这样的列。

enter image description here

然后,您的foreach循环中的内容将发生变化

foreach($User in $Users){
    $ADUser = Get-ADUser $User.UserID
...
}

现在,如果用户存在,您的代码将执行Set-AdUser块。在您当前的代码中,由于$Aduser实际上无法找到用户,因此(可能会感到惊讶,如果不提示输入Identity,它会走得那么远)会一直为空,并且总是会碰到ElseIf块。