gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 06:56:28 24 4
gpt4 key购买 nike

我正在运行一个 PowerShell 函数应用程序 (~3),它使用 Az PowerShell 模块来管理存储帐户。如果我执行的任何操作导致错误,我将无法在 try/catch block 中检查特定类型。

请务必注意,如果没有错误,则使用 Az.Storage 模块的操作会成功。

例如,如果我尝试删除一个不存在的容器,下面的示例会导致以下错误 -

Unable to find type [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 并包含模块 list 以要求 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

为确保我添加了正确的程序集,我更新了 list 以将每个程序集都包含在 Az.Storage 模块中,但仍未找到该类型。

最佳答案

在我的问题中,我添加了一个更新,提到我曾尝试添加一个需要所有 Az.Storage 程序集的模块 list ;这不太正确...

我从 Az.Storage 模块随附的模块 list 中复制了所需程序集的列表,但这不包括 Microsoft.Azure.PowerShell.Cmdlets.Storage.dll。使用模块 list 要求此程序集(仅此一个,不需要其他程序集)已奏效。

New-ModuleManifest ./Modules/StorageHelper/StorageHelper.psd1 -RootModule StorageHelper.psm1 -RequiredAssemblies .\bin\Az.Storage\3.0.0\Microsoft.Azure.PowerShell.Cmdlets.Storage.dll 

关于PowerShell 无法在 try/catch block 中找到异常类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65128669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com