首页 > 解决方案 > 循环访问特定的广告用户

问题描述

我有循环广告用户的问题。我有一个正在或曾经在 AD 中的用户列表。该列表包含大约 800 个条目(因此不是手动的)循环应该返回这个用户是否仍然在 AD 中或不再存在

[string[]]$user = Get-Content -Path D:\Temp\user.txt    
for ($i=0;$i -le $user.Count; $i++){

    [bool] (Get-ADUser -Filter { "SamAccountName -eq '$user[$i]'" })
}

如果我运行它,会出现以下错误: 错误信息

如果您能提供帮助,我将不胜感激

标签: arrayspowershell

解决方案


也许更简单的方法是反转逻辑并首先将所有用户 SamAccountNames 放在一个 Hashtable 中。

然后遍历文本文件中的名称并报告是否在哈希表中找到该名称。

就像是:

# create a hashtable with SamAccountName as key. The value doesn't matter
$userHash = @{}
Get-ADUser -Filter * | ForEach-Object { $userHash[$_.SamAccountName] = $true }

# read the textfile to get an array of SamAccountNames to test
Get-Content -Path 'D:\Temp\user.txt' | ForEach-Object {
    [PsCustomObject]@{
        'User'   = $_
        'Exists' = $userHash.ContainsKey($_)
    }
 }

如果您愿意,可以通过| Export-Csv -Path 'D:\Temp\UserReport.csv' -NoTypeInformation在最后的大括号后附加来将其保存到 csv 文件。

输出:

用户存在
---- ------
劳奇斯真  
假的

推荐阅读