我正在尝试让我的 PowerShell 脚本查询活动目录,返回计算机描述和计算机所在的组织单位。我正在引用我的 .csv 文件作为计算机名称。我可以让它运行,但没有任何内容附加到 .csv 任何帮助将不胜感激
# Define the file path
$file_path = "C:\Temp\Description.csv"
# Read the contents of the file
$content = Import-Csv $file_path
# Define the Active Directory query
$filter = "(description -like '*$($content.Description)*')"
# Search for the user in Active Directory
$users = Get-ADUser -Filter $filter -Properties * | Select-Object Name, Description, DistinguishedName
# Update the CSV file with the results
$csv = Import-Csv $file_path
foreach ($row in $csv) {
foreach ($user in $users) {
if ($row.Name -eq $user.Name) {
$row.Description = $user.Description
$row.DistinguishedName = $user.DistinguishedName
}
}
}
$csv | Export-Csv $file_path -NoTypeInformation
您正在使用过滤器,一个包含多个描述的属性。
如果所有描述都相同,则选择第一个,然后过滤。
$csv = Import-Csv -Path 'C:\Temp\Description.csv'
$description = $csv | Select-Object -First 1 -ExpandProperty Description
# Or
$description = ($csv[0]).Description
$filter = "description -like '*$description*'"
现在,如果您有多个描述,请将所有内容包装到一个 foreach 循环中。
此外,无需多次导入 CSV。
把东西分开也很重要,让我们把修改后的数据放在另一个对象中,稍后导出。
[System.Collections.ArrayList]$outputCsv = @()
foreach ($row in (Import-Csv -Path 'C:\Temp\Description.csv')) {
# Don't use -Properties *. It's an expensive operation.
# Name and DistinguishedName are standard properties, the only non-standard we need is Description
$users = Get-ADUser -Filter "description -like '*$description*'" -Properties Description
# Do not modify the original row in a loop. PS throws an error.
$finalRow = [PSCustomObject]$row
# If you have no repeated users, you don't need another loop.
$user = $users | Where-Object { $PSItem.Name -eq $finalRow.Name }
if ($user) {
$finalRow.Description = $user.Description
$finalRow.DistinguishedName = $user.DistinguishedName
}
[void]$outputCsv.Add($finalRow)
}
# Don't use the same file to avoid errors.
$finalRow | Export-Csv -Path 'C:\Temp\DescriptionUpdated.csv'
如果您确实有重复用户,我建议将他们从 CSV 中删除。
“描述”属性也不适合过滤。
您可以使用“名称”,或者更好的是,“SamAccountName”。有了它你根本不需要过滤器,你可以使用 -Identity 代替。
希望有帮助。
快乐的脚本!