Active Directory Powershell 脚本让我很为难

问题描述 投票:0回答:1

我正在尝试让我的 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

powershell active-directory
1个回答
0
投票

您正在使用过滤器,一个包含多个描述的属性。
如果所有描述都相同,则选择第一个,然后过滤。

$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 代替。

希望有帮助。
快乐的脚本!

© www.soinside.com 2019 - 2024. All rights reserved.