我正在尝试使用用户电子邮件地址的文本文件来查找相应用户的samaccountname名称。
Clear-Host
Import-Module ActiveDirectory
$File = "C:\T2\Users.csv"
$Users = Get-Content $File
ForEach ($User in $Users)
{ Get-ADUser -Filter * | Where { $_.EmailAddress -eq $User } | Select SamAccountName -ExpandProperty SamAccountName }
我正试图了解我在做什么错
答案 0 :(得分:6)
如果文件实际上是.csv
(逗号分隔的值),则您正在执行的操作是使用Get-Content
获取原始字符串内容。有一个Import-Csv
cmdlet,它将把您的CSV转换为powershell对象,以便您可以对其进行迭代并像对待代码中那样尝试作为属性访问标头:
$users = Import-Csv -Path '/path/to/file.csv'
然后在循环中,您可以通过不查询每个用户的整个AD树来清理并加快代码:
foreach ($user in $users)
{
Get-ADUser -Filter "EmailAddress -eq '$($user.EmailAddress)'" |
Select-Object -ExpandProperty SamAccountName
}
超级简化版:
#requires -Module ActiveDirectory
foreach ($user in Import-Csv -Path '/path/to/file.csv')
{
(Get-ADUser -Filter "EmailAddress -eq '$($user.EmailAddress)'").SamAccountName
}