2016-01-07 103 views
0

我一直在打架一个愚蠢的问题,当我尝试在特定命令中使用变量时出现错误,但是如果我使用实际变量值,它会起作用。为什么我不能在这里使用变量以及解决方法是什么?请帮助。变量都具有正确的值。我确认一切正常,直到执行最后一行...命令抛出错误中的变量

(此代码中的最后一行抛出错误......)

##################################################################### 
# Prompt for user input regarding deleted and destination mailboxes # 
##################################################################### 

# Ask for Deleted Mailbox SMTP Address 
$DeletedMailbox = Read-Host "Enter Primary Address of Deleted Mailbox: " 

# Ask for Destination Mailbox SMTP Address 
$DestinationMailbox = Read-Host "Enter Primary Address of Destination Recovery Mailbox: " 

############################################################# 
# Query for the Exchange GUID information of both Mailboxes # 
############################################################# 
$DeletedGUID = Get-Mailbox -SoftDeletedMailbox -Identity $DeletedMailbox | 
       Select ExchangeGUID | FT -HideTableHeaders 

$DestinationGUID = Get-Mailbox -Identity $DestinationMailbox | 
        Select ExchangeGUID | FT -HideTableHeaders 

############################################################################ 
# Initiate the Restore Request from Deleted mailbox to destination mailbox # 
############################################################################ 
New-MailboxRestoreRequest -SourceMailbox $DeletedGUID -TargetMailbox $DestinationGUID -AllowLegacyDNMismatch 

错误就抛出....

Cannot process argument transformation on parameter 'SourceMailbox'. Cannot convert 
the "System.Collections.ArrayList" value of type "System.Collections.ArrayList" 
to type "Microsoft.Exchange.Configuration.Tasks.MailboxIdParameter". 
    + CategoryInfo   : InvalidData: (:) [New-MailboxRestoreRequest], ParameterBindin...mationException 
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,New- MailboxRestoreRequest 
    + PSComputerName  : ps.outlook.com

回答

2

显然$DeletedGUID是一个列表,而不是一个单一的元素。在一个循环中

New-MailboxRestoreRequest -SourceMailbox $DeletedGUID[0] ... 

或运行New-MailboxRestoreRequest:无论是从列表中选择一个元素

$DeletedGUID | ForEach-Object { 
    New-MailboxRestoreRequest -SourceMailbox $_ ... 
} 

此外,取代

...| Select ExchangeGUID | FT -HideTableHeaders 

Select -Expand ExchangeGUID 

Format-* cmdlet用于输出格式化,而不是用于进一步处理的内容。

+0

您需要将@ Ansgar的[0]建议应用于您的两个GUID变量调用。 –

+0

假设两个'Get-Mailbox'语句产生多个结果,是的。另一个选择是只挑选其中一个结果('select -First 1'),所以变量首先不包含集合。 –

+0

可能不是在这种情况下,但我已经看到了Powershell将决定是创建一个数组还是根据结果将单个值填充到变量中的场景。在这些场景中,我通常强制返回结果到一个数组中,然后返回第一个值,如果我确定这总是我想要的......'@(Get-Mailbox -SoftDeletedMailbox -Identity $ DeletedMailbox | Select -Expand ExchangeGUID)[0]' –