Я использую приложение-функцию PowerShell (~3
), которое использует Az
модуль PowerShell для управления учетной записью хранения. Если какая-либо из выполняемых мной операций приводит к ошибке, я не могу проверить конкретные типы в блоке _3 _ / _ 4_.
Важно отметить, что там, где нет ошибки, операции с использованием модуля Az.Storage
выполняются успешно.
Например, если бы я попытался удалить контейнер, который не существует, приведенный ниже пример приведет к следующей ошибке:
Не удалось найти тип [Microsoft.WindowsAzure.Commands.Storage.Common.ResourceNotFoundException].
Чтобы получить тип возвращаемого исключения, я использую $_.Exception.GetType().fullname
.
Я также попытался добавить в сценарий пространство имен, которое может вызывать исключения.
using namespace Microsoft.WindowsAzure.Commands.Storage.Common
Пример
Class Storage
{
[AppSettings]$AppSettings = [AppSettings]::GetInstance()
[Object]$Context
Storage()
{
$key = Get-AzStorageAccountKey -ResourceGroupName $this.AppSettings.StorageAccountResourceGroup -Name $this.AppSettings.StorageAccountName
$this.Context = New-AzStorageContext -StorageAccountName $this.AppSettings.StorageAccountName -StorageAccountKey $key[0].Value
}
[void] DeleteBlobContainer([String]$name)
{
try {
Remove-AzStorageContainer -Name $name -Context $this.Context -Force -ErrorAction Stop
}
catch [Microsoft.WindowsAzure.Commands.Storage.Common.ResourceNotFoundException] {
throw [ContainerNotFoundException]::new($name)
}
catch {
throw [DustBinException]::new($_.Exception.Message)
}
}
}
Обновлять
При вызове функции, запускаемой HTTP, я вижу, что модуль Az.Storage
установлен. Это ожидается, учитывая успешные операции, для которых требуется модуль -
Get-Module -Name Az.Storage -ListAvailable | Select-Object Name, Version, ModuleBase | ConvertTo-Json
[
{
"Name": "Az.Storage",
"Version": {
"Major": 3,
"Minor": 0,
"Build": 0,
"Revision": -1,
"MajorRevision": -1,
"MinorRevision": -1
},
"ModuleBase": "C:\\Users\\dgard\\AppData\\Local\\AzureFunctions\\DustBin\\ManagedDependencies\\201202095548376.r\\Az.Storage\\3.0.0"
}
]
Однако, если скопировать модуль в . \ Bin и включить манифест модуля, чтобы потребовать Microsoft.Azure.Storage.Common.dll, как предлагается в этот вопрос, тип по-прежнему не найден.
New-ModuleManifest ./Modules/StorageHelper/StorageHelper.psd1 -RootModule StorageHelper.psm1 -RequiredAssemblies .\bin\Az.Storage\3.0.0\Microsoft.Azure.Storage.Common.dll
Чтобы быть уверенным, что я добавляю правильную сборку, я обновил манифест, чтобы включить каждую сборку в модуль Az.Storage
, но тип по-прежнему не найден.
ResourceNotFoundException
. Еще не пробовал. Но я надеюсь, что вы сможете это получить. - person Ranadip Dutta   schedule 03.12.2020[Microsoft.WindowsAzure.Commands.Storage.Common.ResourceNotFoundException]
автономно? Субоптимальным обходным решением было бы провести сравнение строк на$_.Exception.GetType().ToString()
в одном универсальном блокеcatch
. - person mklement0   schedule 03.12.2020class
? - person Mathias R. Jessen   schedule 04.12.2020