我正在尝试自动启用企业语音的群组成员,我有以下(我知道的非常粗糙),如果只有一个成员,则可以工作:
$telephoneNumber = Get-ADGroupMember -Identity "LyncEnterpriseVoice" | Get-ADUser -Properties telephoneNumber | Select-Object -ExpandProperty telephoneNumber
$ext = Get-ADGroupMember -Identity "LyncEnterpriseVoice" | Get-ADUser -Properties otherTelephone | Select-Object -ExpandProperty othertelephone
Get-ADGroupMember -Identity "LyncEnterpriseVoice" | foreach {Get-ADUser $_.SamAccountName | foreach {Set-CSuser -identity $_.UserPrincipalname –EnterpriseVoiceEnabled $True –LineUri "tel:$telephoneNumber;ext=$ext"}}
我无法弄清楚如何做一个foreach其他电话和电话号码。有人可以指出我正确的方向。
答案 0 :(得分:0)
不是一个明确的答案,但应该帮助你:
修改强>
我不确定你的意思"我得到了我想要的结果"。我很确定你的变量不包含你认为他们做的事情。逐行构建脚本很有帮助 - 检查每个步骤处理的对象。否则你只是做出假设,你不可避免地经常出错。
例如,在第1行中,您似乎获得了一系列电话号码,第2行中有一系列额外的电话号码($ telephoneNumber和$ ext)。但是在第3行中,您使用这些完整的数组而不是单个元素来为每个用户构建LineUri字符串,这可能是正确的。
同样在第3行中,您使用AD用户对象作为输入,然后执行foreach并再次获取每个用户的AD用户对象 - 这是一个明确的信号,表明您不知道正在处理的对象。
例如:
获取我们想要操作的用户,包括电话号码。否则你正在处理三个独立的阵列,并且不知道如何匹配所有东西 - 它只是凌乱。
$users = Get-ADGroupMember -Identity LyncEnterpriseVoice | Get-ADUser -Properties telephoneNumber, othertelephone
让我们看看我们有什么:
$users
好吧,它是一个包含我们需要的所有信息的对象数组,但出于好奇,它们到底是什么类型的对象?
$users[0].GetType()
不出所料,它们是ADUser对象。让我们设置一些属性:
$users | foreach { Set-SCUser -Identity $_.UserPrincipalName –EnterpriseVoiceEnabled $true –LineUri "tel:$($_.telephoneNumber);ext=$($_.othertelephone)" }
请注意字符串中的子表达式$(...)
- 这些是必要的,因为否则变量$_
将被展开,其余变量将".telephoneNumber"
。
另外一件事:你写" tel: ...; ext = ......"这是不一致的,看起来很奇怪 - 也许是一个错字?