【发布时间】:2018-07-06 04:10:00
【问题描述】:
在过去的几个小时里,我一直在用头撞墙,我确定这是因为我不太了解 @{} 和 $_ 的工作原理。
首先是代码:
Get-ADUser username -Properties mail | Set-ADUser -replace @{"proxyaddresses"="SMTP:"+$_.mail}
如您所见,我正在尝试使用用户的电子邮件地址更新 proxyaddresses 字段。
相反,只有字符串被拉出:(输出:proxyaddresses : {SMTP:})并且管道被忽略了,我假设它是因为出于某种原因它是空的,但我不清楚为什么。
我尝试过诸如"proxyaddresses="SMTP:$($_.mail)" 之类的变体我尝试使用始终与Get-ADUser 一起发送的默认属性,例如UserPrincipalName
我知道这样的事情是可能的,因为http://www.itprotoday.com/management-mobility/more-flexible-active-directory-one-liner 和使用链接示例的一些变体对 SO 的多个答案。
当我将变量分配给 SMTP:$_.mail 然后在字段中使用它时,如下所示:
Get-ADUser username -Properties mail | %{ $smtp = "SMTP:"+$_.mail
$_|Set-ADUser -replace @{"proxyAddresses"=$smtp}
这可行(输出:proxyaddresses :{SMTP:emailaddress@domain.com})。如果我像这样省略字符串:@{"proxyaddresses"=$_.mail}
我收到以下错误:
Set-ADUser:无法将参数“替换”绑定到目标。异常设置“替换”:“对象引用未设置为对象的实例。”
在 line:1 char:58
我不确定这是什么意思。
我希望对我最初的想法进行一些变化,但如果没有其他方法,我会使用额外的变量来解决这个问题。
编辑:我的问题似乎有些混乱,所以我会澄清一下:
有没有办法使用管道变量$_,而无需在哈希表内使用脚本块(在脚本块内需要像他的第一个答案中建议的@TheIncorrigible1 那样的双管道。)?
编辑:基于this,这似乎不应该有任何问题。
【问题讨论】:
-
顺便说一句,为了测试,我建议不要使用
proxyaddresses我在我的帐户上留下错误时学到了这一点,现在我无法在本地访问电子邮件,直到 DC 复制。 .. 您可以使用任何未使用的 extensionAttribute 或发明自己的测试属性并使用它。
标签: powershell active-directory