![](/img/trans.png)
[英]How do I loop through a CSV file with a batch or PowerShell script?
[英]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.