Az Powershell 模块命令挂起

问题描述 投票:0回答:1

我遇到了运行各种 azure 模块命令将挂起的问题。这似乎只有在 ISE 之外启动时才会真正发生。

$azurevmdetails = Get-AzVM -Name $serverName

在 ISE 中运行时,每次都返回良好的结果。 当在正常的 Powershell 5.1 窗口中与包含 GUI/表单的脚本内联执行时,它会在到达此部分后立即挂起,并且控制台中不会指示任何错误。大约 90% 的时间都会发生这种情况。

我尝试了下面的另一种方法,其结果相同。

$command = "Get-AzVM -Name $serverName"
$azurevmdetails = Invoke-Expression $command

我也尝试过作为作业运行,但问题是整个 powershell 控制台似乎没有响应并且无法恢复。

我也尝试过将模块更新到最新版本。 尽量避免使用 Powershell 7,因为它不能在 GUI 中开箱即用,而且与之相关的主脚本有数千行代码。

windows azure powershell azure-powershell
1个回答
0
投票

Azure PowerShell 命令挂起问题

Azure PowerShell 命令可能会挂起,特别是在 PowerShell ISE 外部或包含 GUI 元素的 PowerShell 脚本内执行时。此问题可能源于多种因素,例如线程阻塞、模块兼容性问题或 ISE 与标准 PowerShell 控制台相比管理会话的不同方式。

在这里我将分享一些在这些情况下需要遵循的问题的排查问题。

调试和隔离

  • 在不带 GUI 组件的单独的最小 PowerShell 脚本中测试有问题的 Azure 命令。这可以帮助确定问题是否特定于命令本身或其与 GUI 的交互。
  • 围绕 Azure 命令实施强大的日志记录和错误处理,以捕获控制台中可能未显示的任何异常或错误。

参考https://github.com/Azure/azure-powershell/issues/17505

PowerShell 环境兼容性

  • 集成 GUI 元素时,请考虑利用运行空间或 PowerShell 作业来执行异步操作,而不阻塞 UI 线程。
  • 尽管您因 GUI 兼容性问题而对使用 PowerShell 7 表示担忧,但在非 GUI 环境中测试 PowerShell 7 中的命令可能会有所帮助。这种方法可以帮助确定问题是特定于版本还是与 GUI 框架兼容性有关。

参考https://learn.microsoft.com/en-us/dotnet/api/system.management.automation.runspaces.runspace?view=powershellsdk-7.4.0

替代执行策略

  • 您可以考虑利用
    Invoke-Command
    在新的 PowerShell 进程或会话中执行 Azure 命令,这可能有助于规避与环境相关的问题。
  • 由于作为作业运行一直存在问题,因此探索 PowerShell Runspaces 作为异步执行任务而不阻塞主线程的替代方案,这在 GUI 应用程序中尤其重要

参考https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/invoke-command?view=powershell-7.4

https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_jobs?view=powershell-7.4

使用
-AsJob
参数

既然您提到使用 PowerShell 作业没有帮助,因为控制台变得无响应,请考虑使用

-AsJob
参数和
Get-AzVM
cmdlet 将命令作为后台作业运行。这可能与手动创建作业的行为不同,并且可以提供更好的响应能力。

`$azurevmdetailsJob = Get-AzVM -Name $serverName -AsJob
$azurevmdetails = Receive-Job -Job $azurevmdetailsJob -Wait`

调试此类问题可能具有挑战性,特别是当脚本涉及 GUI 元素和异步操作之间的复杂交互时。逐步应用上述建议可以帮助隔离并有望解决问题

链接用于解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.