繁体   English   中英

PowerShell 无法在 try/catch 块中找到异常类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM