我遇到了运行各种 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 中开箱即用,而且与之相关的主脚本有数千行代码。
Azure PowerShell 命令挂起问题
Azure PowerShell 命令可能会挂起,特别是在 PowerShell ISE 外部或包含 GUI 元素的 PowerShell 脚本内执行时。此问题可能源于多种因素,例如线程阻塞、模块兼容性问题或 ISE 与标准 PowerShell 控制台相比管理会话的不同方式。
在这里我将分享一些在这些情况下需要遵循的问题的排查问题。
参考:https://github.com/Azure/azure-powershell/issues/17505
Invoke-Command
在新的 PowerShell 进程或会话中执行 Azure 命令,这可能有助于规避与环境相关的问题。-AsJob
参数既然您提到使用 PowerShell 作业没有帮助,因为控制台变得无响应,请考虑使用
-AsJob
参数和 Get-AzVM
cmdlet 将命令作为后台作业运行。这可能与手动创建作业的行为不同,并且可以提供更好的响应能力。
`$azurevmdetailsJob = Get-AzVM -Name $serverName -AsJob
$azurevmdetails = Receive-Job -Job $azurevmdetailsJob -Wait`
调试此类问题可能具有挑战性,特别是当脚本涉及 GUI 元素和异步操作之间的复杂交互时。逐步应用上述建议可以帮助隔离并有望解决问题
链接用于解决问题。