![](/img/trans.png)
[英]Unable to catch the exception in try/catch statement in powershell
[英]PowerShell unable to find type of exception in try/catch block
我正在运行 PowerShell Function 应用程序( ~3
),它使用Az
PowerShell 模块来管理存储帐户。 如果我执行的任何操作导致错误,我将无法检查try
/ catch
块中的特定类型。
请务必注意,在没有错误的情况下,使用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 触发 function 时,我可以看到安装了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 ,如this question中所建议的那样,仍然找不到该类型。
New-ModuleManifest ./Modules/StorageHelper/StorageHelper.psd1 -RootModule StorageHelper.psm1 -RequiredAssemblies .\bin\Az.Storage\3.0.0\Microsoft.Azure.Storage.Common.dll
为了确保我添加了正确的程序集,我更新了清单以包含Az.Storage
模块中的每个程序集,但仍然找不到该类型。
在我的问题中,我添加了一个更新,提到我试图添加一个需要所有Az.Storage
程序集的模块清单; 这不太正确......
我已从Az.Storage
模块随附的模块清单中复制了所需程序集的列表,但这不包括Microsoft.Azure.PowerShell.Cmdlets.Storage.dll
。 使用模块清单来要求此程序集(仅此程序,不需要其他程序)已经奏效。
New-ModuleManifest ./Modules/StorageHelper/StorageHelper.psd1 -RootModule StorageHelper.psm1 -RequiredAssemblies .\bin\Az.Storage\3.0.0\Microsoft.Azure.PowerShell.Cmdlets.Storage.dll
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.