【问题标题】:Unexpected token in expression or statement (Trying to set new domain to aliases)表达式或语句中出现意外标记(尝试将新域设置为别名)
【发布时间】:2020-10-20 02:55:06
【问题描述】:

我在尝试向 Exchange 服务器上的用户别名添加新域时遇到了问题。我跑了:

$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri “https://ps.outlook.com/powershell/” -Credential $cred -Authentication Basic -AllowRedirection

Import-PSSession $session

$Mailboxes = Get-Mailbox

Foreach ($Mailbox in $Mailboxes) {$NewAddress = $Mailbox.Alias + "@newdomain.com" $Mailbox.EmailAddresses += $NewAddress Set-Mailbox -Identity $Mailbox.Alias -EmailAddresses $Mailbox.EmailAddresses}

运行第 4 行后,我遇到:

$Mailbox.EmailAddresses += $NewAddress Set-Mailbox -Identity $Mai ...
+                    ~~~~~~~~
Unexpected token '$Mailbox' in expression or statement.

还有:

At line:1 char:128
+ ... += $NewAddress Set-Mailbox -Identity $Mailbox.Alias -EmailAddresses $Mailbox.Ema ...
+                    ~~~~~~~~~~~
Unexpected token 'Set-Mailbox' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken
 

我似乎无法弄清楚为什么 $Mailbox 和 Set-Mailbox 在这种情况下不起作用。这是我第一次通过 PowerShell 尝试这样的事情,所以我有点迷茫。

任何见解都会很棒。 谢谢!

【问题讨论】:

    标签: powershell email exchange-server


    【解决方案1】:

    您需要在单独的行上发出每个命令。您收到的错误意味着 PowerShell 正在尝试将 $MailboxSet-Mailbox 作为参数传递给 $NewAddress =,而不是将它们作为单独的命令运行

    $session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri “https://ps.outlook.com/powershell/” -Credential $cred -Authentication Basic -AllowRedirection
    
    Import-PSSession $session
    
    $Mailboxes = Get-Mailbox
    
    Foreach ($Mailbox in $Mailboxes) 
    {
        $NewAddress = $Mailbox.Alias + "@newdomain.com"
        $Mailbox.EmailAddresses += $NewAddress
        Set-Mailbox -Identity $Mailbox.Alias -EmailAddresses $Mailbox.EmailAddresses
    }
    

    【讨论】:

      【解决方案2】:

      您的代码实际上对我有用,但我不推荐这种方法。您应该使用Set-Mailbox 的全部功能。 -EmailAddresses 参数将采用允许您定义添加和删除的哈希值。在您的情况下,这看起来像:

      Foreach ($Mailbox in $Mailboxes) 
      {
          $NewAddress = $Mailbox.Alias + "@newdomain.com"
          Set-Mailbox -Identity $Mailbox.Alias -EmailAddresses @{ Add = $NewAddress }
      }
      

      一般避开+=。如果您对大量对象进行操作,它可能会非常慢。这有几个原因,但主要是因为数组是不可变的,所以+= 会在您每次使用它时重新创建和复制。这显然具有复合效果,您使用它的次数越多。如果数组不断变大,这是一个更大的问题,但是对于您的原始代码,您调用它的次数也可能是一个问题。互联网上有很多关于此的信息。如果我有时间,我会发布其他 StackOverflow 讨论的评论。

      无论如何,您不需要在您的情况下直接附加一个数组。让我知道这是否有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-25
        • 1970-01-01
        • 1970-01-01
        • 2014-11-12
        • 1970-01-01
        • 1970-01-01
        • 2018-05-04
        • 1970-01-01
        相关资源
        最近更新 更多