PowerShell 代码在自动化帐户混合工作线程中的运行速度比直接在混合工作线程服务器上运行慢得多

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

我有一个用 PowerShell 编写的网络抓取和 HTTP 发布自动化程序,部分是在本地开发的,部分是在我的混合工作人员上使用创作工具包开发的。 在混合工作服务器上进行开发和测试期间,它会在几个小时内按预期运行,但是当代码从自动化帐户在混合工作服务器上运行时,代码速度要慢得多。

有 2 个主要部分会在自动化帐户中减慢速度,每个部分大约需要 50 秒,并且这些部分必须在整个自动化过程中运行数万次:

$unparsedJSON = ($detailsSession.Scripts)[-1].outerHTML

$detailsSession 中只有 31 个脚本块,脚本块有 806 个字符。这在服务器上需要 0.77 毫秒。

$linkedRecord = ($linkedSession.allelements.innertext | Where-Object {$_ -like 'Record -*'})

$linkedSession 中有 419 个元素。这一行直接在服务器上需要 13 毫秒。

azure powershell azure-automation
1个回答
0
投票
  1. 要优化

    $detailsSession.Scripts
    的 JSON 解析过程,建议利用
    ConvertFrom-Json
    cmdlet 而不是直接属性访问。鉴于只有 31 个脚本块,每个脚本块平均大约 806 个字符,解析操作不应该 太慢了。通过使用
    ConvertFrom-Json
    ,可以简化解析过程,并有可能增强解析过程以提高效率。

  2. 在处理像

    $linkedSession
    中的419个元素这样的大型数据集时,使用
    Where-Object
    过滤元素可能会引入性能瓶颈。为了解决这个问题,请考虑利用 XPath 进行优化,特别是在元素结构允许的情况下。 XPath 提供了一种更有效的基于特定模式的过滤方法。

  3. 通过使用

    foreach
    而非
    ForEach-Object
    来优化循环,以提高速度。此外,利用 PowerShell 的并行处理功能(例如作业或运行空间)来同时执行独立任务,从而提高整体性能。

Powershell代码:-

$detailsSession = @"
{
    "Scripts": [
        {"outerHTML": "<script>Script 1</script>"},
        {"outerHTML": "<script>Script 2</script>"},
        {"outerHTML": "<script>Script 3</script>"}
    ]
}
"@

$linkedSession = @"
<elements>
    <element>Record - 1</element>
    <element>Record - 2</element>
    <element>Record - 3</element>
    <element>Other Element</element>
</elements>
"@

# Optimized JSON parsing using ConvertFrom-Json
$unparsedJSON = $detailsSession | ConvertFrom-Json | Select-Object -ExpandProperty Scripts | Select-Object -Last 1 | Select-Object -ExpandProperty outerHTML
Write-Host "Unparsed JSON: $unparsedJSON"

# Optimized element filtering using XPath
$linkedRecord = $linkedSession | Select-Xml "//text()[contains(., 'Record -')]" | ForEach-Object { $_.Node.InnerText }
Write-Host "Linked Record: $($linkedRecord -join ', ')"

输出:-

enter image description here

您还可以使用 Powershell 命令此处启动 Runbook,以获得有关运行的更多见解。

Start-AzAutomationRunbook -AutomationAccountName "siliconautom" -Name "ps2" -ResourceGroupName "siddheshrg"

enter image description here

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