我错误地将许多用户的 DisplayName 更改为某个字符串(例如:xyz)
但是有一个名为 Name 的字段,其中包含 FirstName 和 Lastname。我想要的是获取所有包含 xyz 的用户,然后将 DisplayName 更改为相应的 Name。
Get-Mailbox -ResultSize Unlimited -Filter {DisplayName -like "*xyz*"} |
这给了我所需的数组,我需要更改其 DisplayNames。我在“管道”后面添加什么?
我在 Google 上搜索了很多次,但却找不到答案。
我试过:
Set-Mailbox -DisplayName $_.Name
然而它说
Cannot bind parameter 'DisplayName' to the target. .... cannot be null/empty.
如何将 DisplayName 设置为与 Name 相同的值?
答案1
$_
从一个 cmdlet 直接传输到下一个 cmdlet 时没有变量。因此Set-Mailbox
,DisplayName 参数的 $null 为空,并且失败。尝试将 Set-Mailbox 命令包装在ForEach-Object
调用 (别名%
) 中以获取该$_
变量,如下所示:
Get-Mailbox -ResultSize Unlimited -Filter {DisplayName -like "*xyz*"} | % {Set-Mailbox -Identity $_.PrimarySmtpAddress -DisplayName $_.Name}
答案2
解决方案如下:
$mbxs = Get-Mailbox -ResultSize Unlimited -Filter {DisplayName -like "*FirstName Lastname*"}
$mbxs | foreach { %{Set-Mailbox -Identity $_.PrimarySmtpAddress -DisplayName $_.Name}}
谢谢大家!