我设置了以下脚本,并且按预期工作....除了电子邮件中包含撇号的用户。
$users = get-content C:\Filename.csv
$results = Foreach ($user in $users)
{
get-aduser -filter "EmailAddress -like '$user'" -properties CanonicalName,LastLogon,Name |
select Name,@{N="Thing";E={$_.DistinguishedName.Split(',')[-4]}},@{N="Place";E={$_.DistinguishedName.Split(',')[-5]}},@{N="Last Logon";E `
={[DateTime]::FromFileTime($_.Lastlogon)}}
}
$results | Export-Csv C:Filename.csv -NoTypeInformation
有人知道如何在example_o'connor@example.com
这样的电子邮件中逃避撇号吗?每当我运行上面的脚本时,它总是会在上面的电子邮件地址中出错。
编辑:我的csv文件是一列没有标题的电子邮件地址。
编辑2:抱歉浪费每个人的时间。原来这个脚本运行正常,以及这个线程中的一些建议,比如在我的变量周围添加“”“”,但是我正在测试一个列表,其中并非所有的值都是正确的,所以这是我的错。谢谢大家的时间。
答案 0 :(得分:1)
试试这个......
由于您使用的是CSV,我想您已经从另一个AD cmdlet传输了它们。
Get-Member是一个很棒的工具。
$ users | Get-Member将输出TypeName:CSV:Selected.Microsoft.ActiveDirectory.Management.ADUser
但是,这不是ADUser中Filter参数所需的String类型。 所以转换这个......
$ selection | Get-Member将输出TypeName:System.String。
另一部分是确保Get-ADUser中的-Filter参数逐个正确地扩展字符串,因为Get-ADUser的-Filter参数不能处理字符串数组。
$users = Import-Csv C:\filename.csv
$selection = ($users.emailaddress)
foreach ($user in $selection)
{
get-aduser -filter {EmailAddress -eq $user} -properties CanonicalName,LastLogon,Name |`
select Name,@{N="Thing";E={$_.DistinguishedName.Split(',')[-4]}},`
@{N="Place";E={$_.DistinguishedName.Split(',')[-5]}},`
@{N="Last Logon";E={[DateTime]::FromFileTime($_.Lastlogon)}}
}