从显示名称中获取 samaccountname - 但有额外的

Get samaccountname from display name - but with extras

第一次张贴,但过去网站对我帮助很大。

我们是一家 MSP,经常收到客户的请求,要求从他们发送给我们的用户列表中提取各种详细信息。不幸的是,尽管他们的列表很少(如果有的话)包含 AD 的任何唯一标识符,例如 samAccountName 甚至电子邮件。

所以通常我只获取他们的名字和姓氏、职位等,并在下面使用一些细微的变化来尝试获取所需的 samAccountNames 以在批量修改脚本中工作。

当我尝试将该输出放回 table 以与显示名称对齐时,问题就来了(并且最近引起了很大的头痛)。就好像脚本找不到显示名称一样,它只是移动到列表中的下一个,并将 samAccountName 直接放在它找到的最后一个下面。使其与我放在旁边的显示名称列不一致。

我的问题是我可以在下面的脚本中添加一些东西,当发生错误时,它只需输入 null 或类似的东西到 samAccountName 输出 csv 中,这样我就可以很容易地发现它在 excel sheet.

类似地,有些用户有多个帐户,例如管理员帐户和非管理员帐户,显示名称相同但 samAccountName 不同,因此它会同时提取这两个帐户,这不是什么大问题,但如果有任何方法可以让脚本让我知道什么时候发生?这对未来非常有用。

Import-Module activedirectory
$displayname = @()
$names = get-content "c:\temp\users.csv"
foreach ($name in $names) {


$displaynamedetails = Get-ADUser -filter { DisplayName -eq $name } -server "domain.local"| Select name,samAccountName

$displayname += $displaynamedetails

}

$displayname | Export-Csv "C:\temp\Samaccountname.csv"

所以问题在于您依赖 Get-ADUser 为您提供用户对象,如果没有,您的输出就会出现间隙。您需要为“csv”中的每个 name/line 创建一个对象,而不管 Get-ADUser 是否找到任何内容。

Get-Content 'c:\temp\users.csv' | 
    ForEach-Object {
        $name = $_
        $adUser = Get-ADUser -Filter "DisplayName -eq '$name'" -Server 'domain.local' 

        # Create object for every user in users.csv even if Get-ADUser returns nothing
        [PSCustomObject]@{
            DisplayName    = $name                     # this will be populated with name from the csv file
            SamAccountName = $adUser.SamAccountName    # this will be empty if $adUser is empty
        }
    } | Export-Csv 'C:\temp\Samaccountname.csv'