Как исправить @ {DisplayName = Имя Фамилия} - PullRequest
3 голосов
/ 11 октября 2019

@{DisplayName=Firstname Lastname} должно быть просто 'Имя Фамилия', потому что get-mailbox -identity '@{DisplayName=Firstname Lastname} не будет работать.

Я пытался использовать командлет -replace для удаления текста.

$Olduser = Get-MsolUser -all | Where-Object {$_.BlockCredential -eq $True -and $_.isLicensed -eq $false} | Select-Object displayName,userPrincipalName,BlockCredential,isLicensed

$OldUser | fl *

Используя -replace, я ожидал, что вывод будет без '@ {DisplayName}'


Cannot process argument transformation on parameter 'Identity'. Cannot convert value "@{DisplayName=X X}" to type "Microsoft.Exchange.Configuration.Tasks.MailboxIdParameter". Error: "Cannot conve
rt the "@{DisplayName=X X}" value of type "Deserialized.Selected.Microsoft.Online.Administration.User" to type "Microsoft.Exchange.Configuration.Tasks.MailboxIdParameter"."
    + CategoryInfo          : InvalidData: (:) [Get-Mailbox], ParameterBindin...mationException
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,Get-Mailbox
    + PSComputerName        : outlook.office365.com

1 Ответ

4 голосов
/ 11 октября 2019

Вы передаете тип объекта со свойствами параметру (-Identity), который ожидает только значение. В результате PowerShell преобразует этот объект в строку, что приводит к значению @{DisplayName=Firstname Lastname}. Если вы обращаетесь к свойству DisplayName до его передачи в параметр -Identity, ваша проблема будет решена.

Get-Mailbox -Identity $OldUser.DisplayName
# Or
$OldUser.DisplayName | Get-Mailbox

Подобное поведение можно повторить, набрав в консоли следующее:

[string]$OldUser
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...