我正在编写代码,以使用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文件未导入。
答案 0 :(得分:2)
我知道问题出在哪里。如果找到用户,您的代码将仅更新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,它会走得那么远)会一直为空,并且总是会碰到ElseIf
块。>