Hi Guys,
try{
New-MailboxImportRequest -Name $UPN -BatchName $BatchName -Mailbox $UPN -AzureBlobStorageAccountUri $CompleteURI -BadItemLimit 30 -LargeItemLimit 10 -AzureSharedAccessSignatureToken $AzureToken -TargetRootFolder $AzureRootFolder -ErrorAction Stop
} #close try
catch
{
"[ERROR]`t $($_.name), something went wrong $($_.Exception.message)" | Out-File $Azureimport -Append
} #close catch
Not sure why but when this errors the catch doesnt work. It just errors on the screen and not in the log. I realise its a non terinating error. The error in this case was:
The operation couldn't be performed because '' matches multiple entries.
+ CategoryInfo : NotSpecified: (:) [New-MailboxImportRequest], ManagementObjectAmbiguousException
+ FullyQualifiedErrorId : [Server=MMXP123MB0655,RequestId=7fac98cc-f438-460a-8bd0-9f7717af90f5,TimeStamp=16/03/2017 05:58:39] [FailureCategory=Cmdlet-ManagementObjectAmbiguousException] A1D35C99,Microsoft.Exchange.M
anagement.Migration.MailboxReplication.MailboxImportRequest.NewMailboxImportRequest
+ PSComputerName : ps.outlook.com
Any ideas welcomed
Stuart,
‘-ErrorAction Stop’ turns an error into a terminating error. See this blog post for more details.
The $Error (System.Management.Automation.ErrorRecord) does not have a ‘name’ property. You may be looking for $_.CategoryInfo.TargetName
$Azureimport = '.\Azureimport.txt'
try {
Get-ChildItem sam -ErrorAction Stop
} catch {
"[ERROR] '$($_.CategoryInfo.TargetName)' Something went wrong: '$($_.Exception.message)'" |
Out-File $Azureimport -Append
}
notepad $Azureimport
Perfect, thank you that worked. Good article too.
Hello,
The method above worked, but if the error is different, then do I need multiple catch statements?
try{
New-365MailboxImportRequest -Name $UPN -BatchName $BatchName -Mailbox $UPN -AzureBlobStorageAccountUri $CompleteURI -BadItemLimit 30 -LargeItemLimit 10 -AzureSharedAccessSignatureToken $AzureToken -TargetRootFolder $AzureRootFolder -ErrorAction Stop
} #close try
catch
{
"[ERROR] '$($_.CategoryInfo.TargetName)' Something went wrong: '$($_.Exception.message)'" | Out-File $Azureimport -Append
} #close catch
Get this error:
Unable to open PST file 'https://.blob.core.windows.net/ingestiondata/hhs.stourport.sales.pst'. Error details: The remote server returned an error: (403) Forbidden.
+ CategoryInfo : NotSpecified: (:) [New-MailboxImportRequest], RemotePermanentException
+ FullyQualifiedErrorId : [Server=MMXP12301MB1551,RequestId=491488ab-123e-4611-ac16-f8e78b68ba45,TimeStamp=05/05/2017 08:42:36] [FailureCategory=Cmdlet-RemotePermanentException] 3EC0D361,Microsoft.Exchange.Managemen
t.Migration.MailboxReplication.MailboxImportRequest.NewMailboxImportRequest
+ PSComputerName : ps.outlook.com
But becasue the stop action wasnt triggered, it moves onto this line
"[INFO]`t Mailbox $UPN has been successfully queued for import" | Out-File $Azureimport -Append
So in the log it looks like all is well, but in reality, the import failed. Any pointers on how to catch this error and any other errors that might be different?
Many THanks
In the catch block, an exception occurred and you need to decide what to do with the exception. Currently, you are only only writing a log file, but you are not terminating the execution of code. You need to use Throw or Write-Error to re-throw the error or nest the try statement:
try {
#Splatting: https://technet.microsoft.com/en-us/library/gg675931.aspx
$params = @{
Name = $UPN
BatchName = $BatchName
Mailbox = $UPN
AzureBlobStorageAccountUri = $CompleteURI
BadItemLimit = 30
LargeItemLimit = 10
AzureSharedAccessSignatureToken = $AzureToken
TargetRootFolder = $AzureRootFolder
ErrorAction = "Stop"
}
New365MailboxImportRequest @params
} #close try
catch {
$msg = "[ERROR] '$($_.CategoryInfo.TargetName)' Something went wrong: '$($_.Exception.message)'"
$msg | OutFile $Azureimport Append
#Stop code execution
Throw $msg
} #close catch
or
try {
#Splatting: https://technet.microsoft.com/en-us/library/gg675931.aspx
$params = @{
Name = $UPN
BatchName = $BatchName
Mailbox = $UPN
AzureBlobStorageAccountUri = $CompleteURI
BadItemLimit = 30
LargeItemLimit = 10
AzureSharedAccessSignatureToken = $AzureToken
TargetRootFolder = $AzureRootFolder
ErrorAction = "Stop"
}
New365MailboxImportRequest @params
#Only executed if previous command did not have exception
try {
Set-365Mailbox -Param Foo -ErrorAction Stop
}
catch {
$msg = "[ERROR] '$($_.CategoryInfo.TargetName)' Next Command failed: '$($_.Exception.message)'"
$msg | OutFile $Azureimport Append
}
} #close try
catch {
$msg = "[ERROR] '$($_.CategoryInfo.TargetName)' Something went wrong: '$($_.Exception.message)'"
$msg | OutFile $Azureimport Append
#Stop code execution
#Throw $msg
} #close catch
There is a free eBook in the menu above for Powershell Error Handling