根据最后一个值将增加的数字添加到AD属性

时间:2014-12-03 16:39:04

标签: powershell active-directory increment

我正在尝试使用PowerShell搜索AD属性otherTelephone,如果值为null,则在序列中添加下一个数字。

例如,如果我添加一个名为John的新用户,我希望PowerShell检查AD并查看最后使用的otherTelephone号码是999,因此它会自动为John添加1000。

到目前为止,我已设法导出AD中的用户列表及其各自的otherTelephone号码:

Get-ADUser -Filter * -Properties otherTelephone |
  select name, @{L='otherTelephone'; E={$_.otherTelephone[0]}}, |
  Export-Csv c:\aduser.csv -NoTypeInformation

但我不确定如何从那里继续。

1 个答案:

答案 0 :(得分:0)

正如@Paul在您的问题评论中建议的那样:从AD中读取电话号码,获取最高号码,然后递增。

$nextPhoneNumber = Get-ADUser -Filter * -Properties otherTelephone |
                     ? { $_.otherTelephone } |
                     select -Expand otherTelephone |
                     % { [int]$_ } | sort -Desc | select -First 1
$nextPhoneNumber++

说明:

  • ? { $_.otherTelephone }:确保只处理具有非空属性的对象。
  • select -Expand otherTelephone:展开属性,以便获得电话号码流。这还会处理分配给用户的多个数字(该属性是多值的)。
  • % { [int]$_ }:将每个电话号码从字符串转换为整数,以便对它们进行数字排序。
  • sort -Desc:按降序对列表排序(第一个数字最高)。
  • select -First 1:从列表中选择第一个号码并丢弃其余号码。
  • $nextPhoneNumber++:将数字增加1。

如果您需要为尚未填充otherTelephone属性的所有现有用户执行此操作,您可以执行以下操作:

$users = Get-ADUser -Filter * -Properties otherTelephone

$nextPhoneNumber = $users | ? { $_.otherTelephone } |
                     select -Expand otherTelephone |
                     % { [int]$_ } | sort -Desc | select -First 1

$users | ? { -not $_.otherTelephone } | % {
  $nextPhoneNumber++
  Set-ADUser -Identity $_.DistinguishedName -Replace @{
    'otherTelephone' = $nextPhoneNumber
  }
}