簡體   English   中英

如何在PowerShell腳本中導入CSV文件?

[英]How do I import a CSV file in a PowerShell Script?

我正在編寫代碼,以使用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文件未導入。

我明白問題出在哪里。 如果找到用戶,您的代碼將僅更新AD。 查找AD用戶的命令是Get-Aduser -identity <SamAccountName>

在您的代碼中,您僅使用了$ADUser = Get-ADUser而沒有任何參數。 我很驚訝為什么您沒有收到要求-identity參數值的任何錯誤或提示。

在您的csv中,您可能有一個像這樣的列。

在此處輸入圖片說明

然后在你的foreach循環中會像

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

現在,如果用戶存在,您的代碼將執行Set-AdUser塊。 在您當前的代碼中,由於實際上無法找到用戶,因此$Aduser可能為空(仍然感到驚訝,它在不提示輸入Identity的情況下$Aduser這么遠),並且總是打ElseIf塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM