从powershell中的变量中撇开撇号

时间:2017-06-11 20:19:59

标签: powershell

我设置了以下脚本,并且按预期工作....除了电子邮件中包含撇号的用户。

$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:抱歉浪费每个人的时间。原来这个脚本运行正常,以及这个线程中的一些建议,比如在我的变量周围添加“”“”,但是我正在测试一个列表,其中并非所有的值都是正确的,所以这是我的错。谢谢大家的时间。

1 个答案:

答案 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)}}
   }