【问题标题】:get-ADUser with parameters in a foreach loop from csv with powershell从带有powershell的csv的foreach循环中获取带有参数的ADUser
【发布时间】: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


【解决方案1】:

对于您显示的 CSV 文件,当我添加标题行 SAMAccountName 时,以下内容适用于我:

$username = $user.SAMAccountName
$adsearch = Get-AdUser -Filter {(samAccountName -eq $username) -and (Enabled -eq $true)}

注意大括号而不是引号。

【讨论】:

  • 同意小心$user w.r.t CSV 文件的结构。通常 CSV 文件将有多个列,在这种情况下,$user 将引用 CSV 文件中的 row 而不是特定值,您需要通过(列)名称识别相关属性,例如$user.samAccountName 如果 samAccountName 是 CSV 中的一列。
  • Tomer,感谢您的建议,但现在我收到错误消息:Get-ADUser : The search filter cannot be respected at filelocation:11 char:14 + $adsearch = Get-ADUser -Filter {( samAccountName -eq $user) -and (Enabled -eq $t ...我是否必须使用 Get-ADObject 或 -LDAPFilter 代替?
  • 您的$user 对象看起来如何?是带有用户 SAM 帐户名的字符串吗?
  • 是的,它是一个字符串,其中包含不带空格的 SAM 帐户,但它可能在名字和姓氏之间包含一个点,例如。 john.doe 或 doej9。当我在没有脚本的情况下将有效的用户名直接放在该查询中时,它可以工作。这就是为什么我经常回显变量以检查它们是否正常
  • 你能举一个你正在使用的 CSV 格式的例子吗?
猜你喜欢
  • 2017-02-28
  • 2021-11-25
  • 2018-03-14
  • 2015-06-16
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多