从显示名称中获取 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'
第一次张贴,但过去网站对我帮助很大。
我们是一家 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'