为什么我不能使用Set-ADUser PowerShell cmdlet更新此属性?

时间:2016-11-07 17:23:38

标签: powershell

我正在尝试使用此脚本更新特定city中用户的ou属性,但它不起作用。该脚本完成且没有错误。当我检查用户时,city仍为空白。

$users = Get-ADUser -Filter * -SearchBase 'OU=...' -Properties SamAccountName
foreach ($user in $users){
    Set-ADUser -identity $user.SamAccountName -City 'Alice'
}

1 个答案:

答案 0 :(得分:1)

听起来你的Get-ADUser什么都没有返回,所以永远不会输入foreach循环。

带有Get-ADUser参数的

-Filter如果未找到匹配项,则失败,它会静静地返回空集合

空集合上的foreach循环或$null根本就没有输入,所以总体来说你会得到一个安静的无操作

请注意,-Properties SamAccountName调用中您永远不需要Get-ADUser,因为-Properties仅需要为每个结果对象返回其他属性,而SamAccountName默认属性集的一部分。

因此:

  • 您需要修正Get-ADUser来电,
  • 并且您还应该添加检测该调用的情况的代码,意外地不返回任何对象。

以下代码段演示了后者,它还通过将Get-ADUser的输出直接传递给Set-ADUser来简化您的命令:

# Get the users of interest and pass them to the Set-ADUser call to update
# the City property.
# Note the use of -OutputVariable users, which saves the output from 
# Get-ADUser in variable $users
Get-ADUser -OutputVariable users -Filter * -SearchBase 'OU=...' | Set-ADUser -City 'Alice'

# Report terminating error if no users were found.
# Note: -not $users returns $true if $users is an empty collection
#       (or a similarly "falsy" value such as $null, 0, or '').
if (-not $users) { Throw "Get-ADUser unexpectedly returned nothing." }