【发布时间】:2015-06-01 03:33:08
【问题描述】:
我有一个与导入 csv 文件有关的 powershell 问题,然后通过 csv 文件执行 foreach。
我有类似以下的内容:
$infile = "c:\temp\infile.csv"
$outfile = "c:\temp\outfile.csv"
$csv = Import-csv -path $infile
foreach ($line in $csv)
{
$data = Get-ADUser -Filter {EmailAddress -eq $line.email} -Property Mail | Select-Object -ExpandProperty SamAccountName
}
当我这样做时,我收到以下错误:
Get-ADUser : Property: 'email' not found in object of type: 'System.Management.Automation.PSCustomObject'.
At C:\Temp\program1.ps1:11 char:24
+ $ad_data = Get-ADUser <<<< -Filter {EmailAddress -eq $line.email} -Property Mail | Select-Object -ExpandProperty SamAccountName
+ CategoryInfo : InvalidArgument: (:) [Get-ADUser], ArgumentException
+ FullyQualifiedErrorId : Property: 'email' not found in object of type: 'System.Management.Automation.PSCustomObject'.,Microsoft.ActiveDirectory.Management.Commands.GetADUser
但如果我这样做:
$var = $line.email
$data = Get-ADUser -Filter {EmailAddress -eq $var} -Property Mail | Select-Object -ExpandProperty SamAccountName
为什么第二种方法有效,但第一种方法抛出错误?
谢谢,
【问题讨论】:
-
尝试重命名
$line以避免潜在的冲突(取决于 Get-ADUser 的实现方式)。这有帮助吗? -
或者不支持这种过滤器。详情见here。可能并非所有值都受支持:“有关
支持的类型列表,请参阅 about_ActiveDirectory_ObjectModel。” -
我不得不说我不知道你为什么会遇到这个问题,我做了一些研究,发现一个论坛帖子,很多人讨论这个问题,没有有一个很好的解决方案。我会看看我能从其他 MVP 那里找到什么。
标签: powershell foreach