【发布时间】:2016-05-09 11:29:43
【问题描述】:
我尝试使用 powershell 3 查找 AD,并检查我的 csv 中的用户 (sAMAccountName) 是否存在并在 AD 中处于活动状态。但是,我可能基于括号和括号从一个错误跳到下一个错误,但我找不到正确的方法。我尝试了不同的过滤器,试图将它们传递给一个变量,但我最终得到“找不到与参数名称 -eq ... 匹配的参数”。看起来错误出在 Get-ADUser 处,因为未设置 $adsearch,因此无法评估 if($adsearch)。
csv 文件已经过清理(前导空格等),看起来像(只有一列带有 SAMAccountName):
john.doe
jane.doe
doej2
foo.bar
barf5
param ($inputfile='.\users.csv',$logfile='.\log.csv')
$csv = Import-CSV $inputfile
#"samAccountName,Search Result" | Add-Content $logfile
ForEach ($user in $csv){
echo $user;
#$adsearch = Get-ADUser -Filter 'sAMAccountName -eq "$($user)" -and Enabled -eq $true'
#$filter = "sAMAccountName -eq $($user) -and Enabled -eq $($true)"
#Write-Host "Filter is $filter"
$adsearch = Get-ADUser -Filter "(sAMAccountName -eq '$($user)') -and (Enabled -eq '$($true)')"
echo $adsearch
if ($adsearch){
echo "Found";
echo "$error"
#"$user, Found" | Add-Content $logfile
}
else{
echo "NOT FOUND";
echo "$error"
#"$user, Not Found" | Add-Content $logfile
}
}
解决了。
作为参考,我留下了上面的错误脚本,这是工作脚本(感谢 Tomer 和 Charlie Joynt):
param ($inputfile='.\users.csv',$logfile='.\log.csv')
$csv = Import-CSV $inputfile
"samAccountName,Search Result,Error" | Add-Content $logfile
ForEach ($user in $csv){
$username = $user.SAMAccountName;
$adsearch = Get-ADUser -Filter {(samAccountName -eq $username) -and (Enabled -eq $true)}
echo "search for active user $user"
if ($adsearch){
echo "Found";
"$user, Found" | Add-Content $logfile
}
else{
echo "NOT FOUND";
"$user, Not Found, $error" | Add-Content $logfile
}
}
【问题讨论】:
-
举例说明输入数据的结构有助于解决这类问题。
标签: powershell active-directory