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解析为其包含的值的子表达式