首页 > 解决方案 > 使用 Invoke-AzVMRunCommand 的简单脚本运行时间过长

问题描述

我有一些没有公共 IP 的 Azure VM。我需要从 Azure 管道对它们运行一些自定义的 powershell 脚本。我不能在这里使用预定义的 YAML 任务,因为它们仅适用于具有公共 IP 的 VM。

我正在使用Invoke-AzVMRunCommand powershell 命令。不幸的是,有时它会运行长达 30 分钟,或者在最坏的情况下直到超时。我不时随机注意到这个问题,我在这里看不到每个案例之间的任何相关性。

Invoke-AzVMRunCommand 
    -ResourceGroupName $vmResourceGroup `
    -VMName $vmName `
    -CommandId 'RunPowerShellScript' `
    -ScriptPath $scriptPath `
    -Parameter $parameters

指定脚本路径下的示例简单脚本:

netsh interface portproxy add v4tov4 listenport=$port connectport=$cPort connectaddress="127.0.0.1"

netsh advfirewall firewall add rule name="Test" dir=in action=allow protocol=TCP localport=$port

它通常运行长达 3 分钟。

是否有其他替代方法可以在没有公共 IP 的 Azure VM 上远程运行脚本?对于我不知道的这种情况,也许有更好的方法。

标签: azureazure-powershellazure-vm

解决方案


这可能是很多事情,这里有 3 种可能性:

  1. VM 上有一个挂起的进程。尝试重新启动。

  2. 有几个管道启动相互阻塞的 powershell 脚本。尝试禁用一些管道,这样就不会发生这种情况。

  3. 该脚本在与存储通信时出现问题。尝试为 Azure 存储启用服务终结点。请参阅:https ://docs.microsoft.com/en-us/azure/virtual-network/tutorial-restrict-network-access-to-resources


推荐阅读