Powershell foreach循环从.csv文件中为用户查询AD



powershell的初学者正试图在我的服务台工作中提高效率。本质上,我有一个.csv文件,其中包含一个电子邮件地址列表,我想用它来查询AD,以查看启用/禁用了哪些帐户。到目前为止,我没有从我尝试的内容中得到任何输出,即:

Import-Module ActiveDirectory
$emails = Import-Csv -Path "c:usersmemycsvfile.csv"
foreach($email in $emails) {
Get-ADUser -Filter {userprincipalname -eq '$email.email'} | Select-Object name,enabled
}

.csv文件有一个名为电子邮件的列的标题,这就是我使用"$email.email"的原因。任何人都知道我做错了什么(可能很多(。

非常感谢

这些广告过滤器有点试错。

foreach($email in $emails) {
$upn = $email.email
Get-ADUser -Filter {userprincipalname -eq $upn} | Select-Object name,enabled
}
name   enabled
----   -------
js     True

UserPrincipalName属性可以与用户的电子邮件地址相同,但实际上它们是不同的属性
相似之处在于UserPrincipalName(UPN(是电子邮件地址格式的系统用户的名称

假设在您的域中,UPN也是用户的电子邮件地址。

我猜你的csv实际上是一个文本文件,每个电子邮件地址都在一行上,并且没有标题email

类似的东西

you@yourdomain.com
him@yourdomain.com
her@yourdomain.com
someone.else@yourdomain.com

在这种情况下,您需要使用Get-Content,以便将所有地址(行(作为字符串数组并循环:

Import-Module ActiveDirectory
$emails = Get-Content -Path "c:usersmemycsvfile.csv"
foreach($email in $emails) {
Get-ADUser -Filter "UserPrincipalName -eq '$email'" | Select-Object Name, Enabled
}

或者使用Import-Csv并为其中的字段提供标题:

Import-Module ActiveDirectory
$emails = Import-Csv -Path "c:usersmemycsvfile.csv" -Header 'email'
foreach($email in $emails) {
Get-ADUser -Filter "UserPrincipalName -eq '$($email.email)'" | Select-Object Name, Enabled
}
  • -Filter参数实际上应该是字符串而不是脚本块
  • 在筛选器中使用object.property语法时,需要用$()将其括起来,使其成为PowerShell解析为其包含的值的子表达式

最新更新